//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS APIGateway service.
///
/// Amazon API Gateway Amazon API Gateway helps developers deliver robust, secure, and scalable mobile and web application back ends. API Gateway allows developers to securely connect mobile and web applications to APIs that run on Lambda, Amazon EC2, or other publicly addressable web services that are hosted outside of AWS.
public struct APIGateway: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the APIGateway client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "APIGateway",
            serviceIdentifier: "apigateway",
            serviceProtocol: .restjson,
            apiVersion: "2015-07-09",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: APIGatewayErrorType.self,
            middleware: AWSEditHeadersMiddleware(.add(name: "accept", value: "application/json")),
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }

    /// Initialize the APIGateway client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: some AWSMiddlewareProtocol,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "APIGateway",
            serviceIdentifier: "apigateway",
            serviceProtocol: .restjson,
            apiVersion: "2015-07-09",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: APIGatewayErrorType.self,
            middleware: AWSMiddlewareStack {
                middleware
                AWSEditHeadersMiddleware(.add(name: "accept", value: "application/json"))
            },
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }



    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "apigateway-fips.ca-central-1.amazonaws.com",
            "ca-west-1": "apigateway-fips.ca-west-1.amazonaws.com",
            "us-east-1": "apigateway-fips.us-east-1.amazonaws.com",
            "us-east-2": "apigateway-fips.us-east-2.amazonaws.com",
            "us-west-1": "apigateway-fips.us-west-1.amazonaws.com",
            "us-west-2": "apigateway-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Create an ApiKey resource.
    @Sendable
    @inlinable
    public func createApiKey(_ input: CreateApiKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ApiKey {
        try await self.client.execute(
            operation: "CreateApiKey", 
            path: "/apikeys", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create an ApiKey resource.
    ///
    /// Parameters:
    ///   - customerId: An Amazon Web Services Marketplace customer identifier, when integrating with the Amazon Web Services SaaS Marketplace.
    ///   - description: The description of the ApiKey.
    ///   - enabled: Specifies whether the ApiKey can be used by callers.
    ///   - generateDistinctId: Specifies whether (true) or not (false) the key identifier is distinct from the created API key value. This parameter is deprecated and should not be used.
    ///   - name: The name of the ApiKey.
    ///   - stageKeys: DEPRECATED FOR USAGE PLANS - Specifies stages associated with the API key.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - value: Specifies a value of the API key.
    ///   - logger: Logger use during operation
    @inlinable
    public func createApiKey(
        customerId: String? = nil,
        description: String? = nil,
        enabled: Bool? = nil,
        generateDistinctId: Bool? = nil,
        name: String? = nil,
        stageKeys: [StageKey]? = nil,
        tags: [String: String]? = nil,
        value: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ApiKey {
        let input = CreateApiKeyRequest(
            customerId: customerId, 
            description: description, 
            enabled: enabled, 
            generateDistinctId: generateDistinctId, 
            name: name, 
            stageKeys: stageKeys, 
            tags: tags, 
            value: value
        )
        return try await self.createApiKey(input, logger: logger)
    }

    /// Adds a new Authorizer resource to an existing RestApi resource.
    @Sendable
    @inlinable
    public func createAuthorizer(_ input: CreateAuthorizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Authorizer {
        try await self.client.execute(
            operation: "CreateAuthorizer", 
            path: "/restapis/{restApiId}/authorizers", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a new Authorizer resource to an existing RestApi resource.
    ///
    /// Parameters:
    ///   - authorizerCredentials: Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, specify null.
    ///   - authorizerResultTtlInSeconds: The TTL in seconds of cached authorizer results. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway will cache authorizer responses. If this field is not set, the default value is 300. The maximum value is 3600, or 1 hour.
    ///   - authorizerUri: Specifies the authorizer's Uniform Resource Identifier (URI). For TOKEN or REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations. In general, the URI has this form  arn:aws:apigateway:{region}:lambda:path/{service_api}, where {region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations.
    ///   - authType: Optional customer-defined field, used in OpenAPI imports and exports without functional impact.
    ///   - identitySource: The identity source for which authorization is requested. For a TOKEN or COGNITO_USER_POOLS authorizer, this is required and specifies the request header mapping expression for the custom header holding the authorization token submitted by the client. For example, if the token header name is Auth, the header mapping expression is method.request.header.Auth. For the REQUEST authorizer, this is required when authorization caching is enabled. The value is a comma-separated string of one or more mapping expressions of the specified request parameters. For example, if an Auth header, a Name query string parameter are defined as identity sources, this value is method.request.header.Auth, method.request.querystring.Name. These parameters will be used to derive the authorization caching key and to perform runtime validation of the REQUEST authorizer by verifying all of the identity-related request parameters are present, not null and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function, otherwise, it returns a 401 Unauthorized response without calling the Lambda function. The valid value is a string of comma-separated mapping expressions of the specified request parameters. When the authorization caching is not enabled, this property is optional.
    ///   - identityValidationExpression: A validation expression for the incoming identity token. For TOKEN authorizers, this value is a regular expression. For COGNITO_USER_POOLS authorizers, API Gateway will match the aud field of the incoming token from the client against the specified regular expression. It will invoke the authorizer's Lambda function when there is a match. Otherwise, it will return a 401 Unauthorized response without calling the Lambda function. The validation expression does not apply to the REQUEST authorizer.
    ///   - name: The name of the authorizer.
    ///   - providerARNs: A list of the Amazon Cognito user pool ARNs for the COGNITO_USER_POOLS authorizer. Each element is of this format: arn:aws:cognito-idp:{region}:{account_id}:userpool/{user_pool_id}. For a TOKEN or REQUEST authorizer, this is not defined.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - type: The authorizer type. Valid values are TOKEN for a Lambda function using a single authorization token submitted in a custom header, REQUEST for a Lambda function using incoming request parameters, and COGNITO_USER_POOLS for using an Amazon Cognito user pool.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAuthorizer(
        authorizerCredentials: String? = nil,
        authorizerResultTtlInSeconds: Int? = nil,
        authorizerUri: String? = nil,
        authType: String? = nil,
        identitySource: String? = nil,
        identityValidationExpression: String? = nil,
        name: String,
        providerARNs: [String]? = nil,
        restApiId: String,
        type: AuthorizerType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Authorizer {
        let input = CreateAuthorizerRequest(
            authorizerCredentials: authorizerCredentials, 
            authorizerResultTtlInSeconds: authorizerResultTtlInSeconds, 
            authorizerUri: authorizerUri, 
            authType: authType, 
            identitySource: identitySource, 
            identityValidationExpression: identityValidationExpression, 
            name: name, 
            providerARNs: providerARNs, 
            restApiId: restApiId, 
            type: type
        )
        return try await self.createAuthorizer(input, logger: logger)
    }

    /// Creates a new BasePathMapping resource.
    @Sendable
    @inlinable
    public func createBasePathMapping(_ input: CreateBasePathMappingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BasePathMapping {
        try await self.client.execute(
            operation: "CreateBasePathMapping", 
            path: "/domainnames/{domainName}/basepathmappings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new BasePathMapping resource.
    ///
    /// Parameters:
    ///   - basePath: The base path name that callers of the API must provide as part of the URL after the domain name. This value must be unique for all of the mappings across a single API. Specify '(none)' if you do not want callers to specify a base path name after the domain name.
    ///   - domainName: The domain name of the BasePathMapping resource to create.
    ///   - domainNameId: The identifier for the domain name resource. Required for private custom domain names.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stage: The name of the API's stage that you want to use for this mapping. Specify '(none)' if you want callers to explicitly specify the stage name after any base path name.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBasePathMapping(
        basePath: String? = nil,
        domainName: String,
        domainNameId: String? = nil,
        restApiId: String,
        stage: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BasePathMapping {
        let input = CreateBasePathMappingRequest(
            basePath: basePath, 
            domainName: domainName, 
            domainNameId: domainNameId, 
            restApiId: restApiId, 
            stage: stage
        )
        return try await self.createBasePathMapping(input, logger: logger)
    }

    /// Creates a Deployment resource, which makes a specified RestApi callable over the internet.
    @Sendable
    @inlinable
    public func createDeployment(_ input: CreateDeploymentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Deployment {
        try await self.client.execute(
            operation: "CreateDeployment", 
            path: "/restapis/{restApiId}/deployments", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Deployment resource, which makes a specified RestApi callable over the internet.
    ///
    /// Parameters:
    ///   - cacheClusterEnabled: Enables a cache cluster for the Stage resource specified in the input.
    ///   - cacheClusterSize: The stage's cache capacity in GB. For more information about choosing a cache size, see Enabling API caching to enhance responsiveness.
    ///   - canarySettings: The input configuration for the canary deployment when the deployment is a canary release deployment.
    ///   - description: The description for the Deployment resource to create.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageDescription: The description of the Stage resource for the Deployment resource to create.
    ///   - stageName: The name of the Stage resource for the Deployment resource to create.
    ///   - tracingEnabled: Specifies whether active tracing with X-ray is enabled for the Stage.
    ///   - variables: A map that defines the stage variables for the Stage resource that is associated with the new deployment. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&=,]+.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDeployment(
        cacheClusterEnabled: Bool? = nil,
        cacheClusterSize: CacheClusterSize? = nil,
        canarySettings: DeploymentCanarySettings? = nil,
        description: String? = nil,
        restApiId: String,
        stageDescription: String? = nil,
        stageName: String? = nil,
        tracingEnabled: Bool? = nil,
        variables: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Deployment {
        let input = CreateDeploymentRequest(
            cacheClusterEnabled: cacheClusterEnabled, 
            cacheClusterSize: cacheClusterSize, 
            canarySettings: canarySettings, 
            description: description, 
            restApiId: restApiId, 
            stageDescription: stageDescription, 
            stageName: stageName, 
            tracingEnabled: tracingEnabled, 
            variables: variables
        )
        return try await self.createDeployment(input, logger: logger)
    }

    /// Creates a documentation part.
    @Sendable
    @inlinable
    public func createDocumentationPart(_ input: CreateDocumentationPartRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationPart {
        try await self.client.execute(
            operation: "CreateDocumentationPart", 
            path: "/restapis/{restApiId}/documentation/parts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a documentation part.
    ///
    /// Parameters:
    ///   - location: The location of the targeted API entity of the to-be-created documentation part.
    ///   - properties: The new documentation content map of the targeted API entity. Enclosed key-value pairs are API-specific, but only OpenAPI-compliant key-value pairs can be exported and, hence, published.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDocumentationPart(
        location: DocumentationPartLocation,
        properties: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationPart {
        let input = CreateDocumentationPartRequest(
            location: location, 
            properties: properties, 
            restApiId: restApiId
        )
        return try await self.createDocumentationPart(input, logger: logger)
    }

    /// Creates a documentation version
    @Sendable
    @inlinable
    public func createDocumentationVersion(_ input: CreateDocumentationVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationVersion {
        try await self.client.execute(
            operation: "CreateDocumentationVersion", 
            path: "/restapis/{restApiId}/documentation/versions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a documentation version
    ///
    /// Parameters:
    ///   - description: A description about the new documentation snapshot.
    ///   - documentationVersion: The version identifier of the new snapshot.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The stage name to be associated with the new documentation snapshot.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDocumentationVersion(
        description: String? = nil,
        documentationVersion: String,
        restApiId: String,
        stageName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationVersion {
        let input = CreateDocumentationVersionRequest(
            description: description, 
            documentationVersion: documentationVersion, 
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.createDocumentationVersion(input, logger: logger)
    }

    /// Creates a new domain name.
    @Sendable
    @inlinable
    public func createDomainName(_ input: CreateDomainNameRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DomainName {
        try await self.client.execute(
            operation: "CreateDomainName", 
            path: "/domainnames", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new domain name.
    ///
    /// Parameters:
    ///   - certificateArn: The reference to an Amazon Web Services-managed certificate that will be used by edge-optimized endpoint or private endpoint for this domain name. Certificate Manager is the only supported source.
    ///   - certificateBody: [Deprecated] The body of the server certificate that will be used by edge-optimized endpoint or private endpoint for this domain name provided by your certificate authority.
    ///   - certificateChain: [Deprecated] The intermediate certificates and optionally the root certificate, one after the other without any blank lines, used by an edge-optimized endpoint for this domain name. If you include the root certificate, your certificate chain must start with intermediate certificates and end with the root certificate. Use the intermediate certificates that were provided by your certificate authority. Do not include any intermediaries that are not in the chain of trust path.
    ///   - certificateName: The user-friendly name of the certificate that will be used by edge-optimized endpoint or private endpoint for this domain name.
    ///   - certificatePrivateKey: [Deprecated] Your edge-optimized endpoint's domain name certificate's private key.
    ///   - domainName: The name of the DomainName resource.
    ///   - endpointConfiguration: The endpoint configuration of this DomainName showing the endpoint types and IP address types of the domain name.
    ///   - mutualTlsAuthentication: 
    ///   - ownershipVerificationCertificateArn: The ARN of the public certificate issued by ACM to validate ownership of your custom domain. Only required when configuring mutual TLS and using an ACM imported or private CA certificate ARN as the regionalCertificateArn.
    ///   - policy: A stringified JSON policy document that applies to the execute-api service for this DomainName regardless of the caller and Method configuration. Supported only for private custom domain names.
    ///   - regionalCertificateArn: The reference to an Amazon Web Services-managed certificate that will be used by regional endpoint for this domain name. Certificate Manager is the only supported source.
    ///   - regionalCertificateName: The user-friendly name of the certificate that will be used by regional endpoint for this domain name.
    ///   - routingMode: The routing mode for this domain name. The routing mode determines how API Gateway sends traffic from your custom domain name to your private APIs.
    ///   - securityPolicy: The Transport Layer Security (TLS) version + cipher suite for this DomainName. The valid values are TLS_1_0 and TLS_1_2.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDomainName(
        certificateArn: String? = nil,
        certificateBody: String? = nil,
        certificateChain: String? = nil,
        certificateName: String? = nil,
        certificatePrivateKey: String? = nil,
        domainName: String,
        endpointConfiguration: EndpointConfiguration? = nil,
        mutualTlsAuthentication: MutualTlsAuthenticationInput? = nil,
        ownershipVerificationCertificateArn: String? = nil,
        policy: String? = nil,
        regionalCertificateArn: String? = nil,
        regionalCertificateName: String? = nil,
        routingMode: RoutingMode? = nil,
        securityPolicy: SecurityPolicy? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DomainName {
        let input = CreateDomainNameRequest(
            certificateArn: certificateArn, 
            certificateBody: certificateBody, 
            certificateChain: certificateChain, 
            certificateName: certificateName, 
            certificatePrivateKey: certificatePrivateKey, 
            domainName: domainName, 
            endpointConfiguration: endpointConfiguration, 
            mutualTlsAuthentication: mutualTlsAuthentication, 
            ownershipVerificationCertificateArn: ownershipVerificationCertificateArn, 
            policy: policy, 
            regionalCertificateArn: regionalCertificateArn, 
            regionalCertificateName: regionalCertificateName, 
            routingMode: routingMode, 
            securityPolicy: securityPolicy, 
            tags: tags
        )
        return try await self.createDomainName(input, logger: logger)
    }

    ///  Creates a domain name access association resource between an access association source and a private custom domain name.
    @Sendable
    @inlinable
    public func createDomainNameAccessAssociation(_ input: CreateDomainNameAccessAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DomainNameAccessAssociation {
        try await self.client.execute(
            operation: "CreateDomainNameAccessAssociation", 
            path: "/domainnameaccessassociations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Creates a domain name access association resource between an access association source and a private custom domain name.
    ///
    /// Parameters:
    ///   - accessAssociationSource: The identifier of the domain name access association source. For a VPCE, the value is the VPC endpoint ID.
    ///   - accessAssociationSourceType: The type of the domain name access association source.
    ///   - domainNameArn:  The ARN of the domain name.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDomainNameAccessAssociation(
        accessAssociationSource: String,
        accessAssociationSourceType: AccessAssociationSourceType,
        domainNameArn: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DomainNameAccessAssociation {
        let input = CreateDomainNameAccessAssociationRequest(
            accessAssociationSource: accessAssociationSource, 
            accessAssociationSourceType: accessAssociationSourceType, 
            domainNameArn: domainNameArn, 
            tags: tags
        )
        return try await self.createDomainNameAccessAssociation(input, logger: logger)
    }

    /// Adds a new Model resource to an existing RestApi resource.
    @Sendable
    @inlinable
    public func createModel(_ input: CreateModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Model {
        try await self.client.execute(
            operation: "CreateModel", 
            path: "/restapis/{restApiId}/models", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a new Model resource to an existing RestApi resource.
    ///
    /// Parameters:
    ///   - contentType: The content-type for the model.
    ///   - description: The description of the model.
    ///   - name: The name of the model. Must be alphanumeric.
    ///   - restApiId: The RestApi identifier under which the Model will be created.
    ///   - schema: The schema for the model. For application/json models, this should be JSON schema draft 4 model. The maximum size of the model is 400 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func createModel(
        contentType: String,
        description: String? = nil,
        name: String,
        restApiId: String,
        schema: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Model {
        let input = CreateModelRequest(
            contentType: contentType, 
            description: description, 
            name: name, 
            restApiId: restApiId, 
            schema: schema
        )
        return try await self.createModel(input, logger: logger)
    }

    /// Creates a RequestValidator of a given RestApi.
    @Sendable
    @inlinable
    public func createRequestValidator(_ input: CreateRequestValidatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RequestValidator {
        try await self.client.execute(
            operation: "CreateRequestValidator", 
            path: "/restapis/{restApiId}/requestvalidators", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a RequestValidator of a given RestApi.
    ///
    /// Parameters:
    ///   - name: The name of the to-be-created RequestValidator.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - validateRequestBody: A Boolean flag to indicate whether to validate request body according to the configured model schema for the method (true) or not (false).
    ///   - validateRequestParameters: A Boolean flag to indicate whether to validate request parameters, true, or not false.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRequestValidator(
        name: String? = nil,
        restApiId: String,
        validateRequestBody: Bool? = nil,
        validateRequestParameters: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RequestValidator {
        let input = CreateRequestValidatorRequest(
            name: name, 
            restApiId: restApiId, 
            validateRequestBody: validateRequestBody, 
            validateRequestParameters: validateRequestParameters
        )
        return try await self.createRequestValidator(input, logger: logger)
    }

    /// Creates a Resource resource.
    @Sendable
    @inlinable
    public func createResource(_ input: CreateResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Resource {
        try await self.client.execute(
            operation: "CreateResource", 
            path: "/restapis/{restApiId}/resources/{parentId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Resource resource.
    ///
    /// Parameters:
    ///   - parentId: The parent resource's identifier.
    ///   - pathPart: The last path segment for this resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func createResource(
        parentId: String,
        pathPart: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Resource {
        let input = CreateResourceRequest(
            parentId: parentId, 
            pathPart: pathPart, 
            restApiId: restApiId
        )
        return try await self.createResource(input, logger: logger)
    }

    /// Creates a new RestApi resource.
    @Sendable
    @inlinable
    public func createRestApi(_ input: CreateRestApiRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestApi {
        try await self.client.execute(
            operation: "CreateRestApi", 
            path: "/restapis", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new RestApi resource.
    ///
    /// Parameters:
    ///   - apiKeySource: The source of the API key for metering requests according to a usage plan. Valid values are: HEADER to read the API key from the X-API-Key header of a request. AUTHORIZER to read the API key from the UsageIdentifierKey from a custom authorizer.
    ///   - binaryMediaTypes: The list of binary media types supported by the RestApi. By default, the RestApi supports only UTF-8-encoded text payloads.
    ///   - cloneFrom: The ID of the RestApi that you want to clone from.
    ///   - description: The description of the RestApi.
    ///   - disableExecuteApiEndpoint: Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint
    ///   - endpointConfiguration: The endpoint configuration of this RestApi showing the endpoint types and IP address types of the API.
    ///   - minimumCompressionSize: A nullable integer that is used to enable compression (with non-negative between 0 and 10485760 (10M) bytes, inclusive) or disable compression (with a null value) on an API. When compression is enabled, compression or decompression is not applied on the payload if the payload size is smaller than this value. Setting it to zero allows compression for any payload size.
    ///   - name: The name of the RestApi.
    ///   - policy: A stringified JSON policy document that applies to this RestApi regardless of the caller and Method configuration.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - version: A version identifier for the API.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRestApi(
        apiKeySource: ApiKeySourceType? = nil,
        binaryMediaTypes: [String]? = nil,
        cloneFrom: String? = nil,
        description: String? = nil,
        disableExecuteApiEndpoint: Bool? = nil,
        endpointConfiguration: EndpointConfiguration? = nil,
        minimumCompressionSize: Int? = nil,
        name: String,
        policy: String? = nil,
        tags: [String: String]? = nil,
        version: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestApi {
        let input = CreateRestApiRequest(
            apiKeySource: apiKeySource, 
            binaryMediaTypes: binaryMediaTypes, 
            cloneFrom: cloneFrom, 
            description: description, 
            disableExecuteApiEndpoint: disableExecuteApiEndpoint, 
            endpointConfiguration: endpointConfiguration, 
            minimumCompressionSize: minimumCompressionSize, 
            name: name, 
            policy: policy, 
            tags: tags, 
            version: version
        )
        return try await self.createRestApi(input, logger: logger)
    }

    /// Creates a new Stage resource that references a pre-existing Deployment for the API.
    @Sendable
    @inlinable
    public func createStage(_ input: CreateStageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Stage {
        try await self.client.execute(
            operation: "CreateStage", 
            path: "/restapis/{restApiId}/stages", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Stage resource that references a pre-existing Deployment for the API.
    ///
    /// Parameters:
    ///   - cacheClusterEnabled: Whether cache clustering is enabled for the stage.
    ///   - cacheClusterSize: The stage's cache capacity in GB. For more information about choosing a cache size, see Enabling API caching to enhance responsiveness.
    ///   - canarySettings: The canary deployment settings of this stage.
    ///   - deploymentId: The identifier of the Deployment resource for the Stage resource.
    ///   - description: The description of the Stage resource.
    ///   - documentationVersion: The version of the associated API documentation.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name for the Stage resource. Stage names can only contain alphanumeric characters, hyphens, and underscores. Maximum length is 128 characters.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - tracingEnabled: Specifies whether active tracing with X-ray is enabled for the Stage.
    ///   - variables: A map that defines the stage variables for the new Stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&=,]+.
    ///   - logger: Logger use during operation
    @inlinable
    public func createStage(
        cacheClusterEnabled: Bool? = nil,
        cacheClusterSize: CacheClusterSize? = nil,
        canarySettings: CanarySettings? = nil,
        deploymentId: String,
        description: String? = nil,
        documentationVersion: String? = nil,
        restApiId: String,
        stageName: String,
        tags: [String: String]? = nil,
        tracingEnabled: Bool? = nil,
        variables: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Stage {
        let input = CreateStageRequest(
            cacheClusterEnabled: cacheClusterEnabled, 
            cacheClusterSize: cacheClusterSize, 
            canarySettings: canarySettings, 
            deploymentId: deploymentId, 
            description: description, 
            documentationVersion: documentationVersion, 
            restApiId: restApiId, 
            stageName: stageName, 
            tags: tags, 
            tracingEnabled: tracingEnabled, 
            variables: variables
        )
        return try await self.createStage(input, logger: logger)
    }

    /// Creates a usage plan with the throttle and quota limits, as well as the associated API stages, specified in the payload.
    @Sendable
    @inlinable
    public func createUsagePlan(_ input: CreateUsagePlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlan {
        try await self.client.execute(
            operation: "CreateUsagePlan", 
            path: "/usageplans", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a usage plan with the throttle and quota limits, as well as the associated API stages, specified in the payload.
    ///
    /// Parameters:
    ///   - apiStages: The associated API stages of the usage plan.
    ///   - description: The description of the usage plan.
    ///   - name: The name of the usage plan.
    ///   - quota: The quota of the usage plan.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - throttle: The throttling limits of the usage plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func createUsagePlan(
        apiStages: [ApiStage]? = nil,
        description: String? = nil,
        name: String,
        quota: QuotaSettings? = nil,
        tags: [String: String]? = nil,
        throttle: ThrottleSettings? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlan {
        let input = CreateUsagePlanRequest(
            apiStages: apiStages, 
            description: description, 
            name: name, 
            quota: quota, 
            tags: tags, 
            throttle: throttle
        )
        return try await self.createUsagePlan(input, logger: logger)
    }

    /// Creates a usage plan key for adding an existing API key to a usage plan.
    @Sendable
    @inlinable
    public func createUsagePlanKey(_ input: CreateUsagePlanKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlanKey {
        try await self.client.execute(
            operation: "CreateUsagePlanKey", 
            path: "/usageplans/{usagePlanId}/keys", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a usage plan key for adding an existing API key to a usage plan.
    ///
    /// Parameters:
    ///   - keyId: The identifier of a UsagePlanKey resource for a plan customer.
    ///   - keyType: The type of a UsagePlanKey resource for a plan customer.
    ///   - usagePlanId: The Id of the UsagePlan resource representing the usage plan containing the to-be-created UsagePlanKey resource representing a plan customer.
    ///   - logger: Logger use during operation
    @inlinable
    public func createUsagePlanKey(
        keyId: String,
        keyType: String,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlanKey {
        let input = CreateUsagePlanKeyRequest(
            keyId: keyId, 
            keyType: keyType, 
            usagePlanId: usagePlanId
        )
        return try await self.createUsagePlanKey(input, logger: logger)
    }

    /// Creates a VPC link, under the caller's account in a selected region, in an asynchronous operation that typically takes 2-4 minutes to complete and become operational. The caller must have permissions to create and update VPC Endpoint services.
    @Sendable
    @inlinable
    public func createVpcLink(_ input: CreateVpcLinkRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> VpcLink {
        try await self.client.execute(
            operation: "CreateVpcLink", 
            path: "/vpclinks", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a VPC link, under the caller's account in a selected region, in an asynchronous operation that typically takes 2-4 minutes to complete and become operational. The caller must have permissions to create and update VPC Endpoint services.
    ///
    /// Parameters:
    ///   - description: The description of the VPC link.
    ///   - name: The name used to label and identify the VPC link.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - targetArns: The ARN of the network load balancer of the VPC targeted by the VPC link. The network load balancer must be owned by the same Amazon Web Services account of the API owner.
    ///   - logger: Logger use during operation
    @inlinable
    public func createVpcLink(
        description: String? = nil,
        name: String,
        tags: [String: String]? = nil,
        targetArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> VpcLink {
        let input = CreateVpcLinkRequest(
            description: description, 
            name: name, 
            tags: tags, 
            targetArns: targetArns
        )
        return try await self.createVpcLink(input, logger: logger)
    }

    /// Deletes the ApiKey resource.
    @Sendable
    @inlinable
    public func deleteApiKey(_ input: DeleteApiKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteApiKey", 
            path: "/apikeys/{apiKey}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the ApiKey resource.
    ///
    /// Parameters:
    ///   - apiKey: The identifier of the ApiKey resource to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApiKey(
        apiKey: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteApiKeyRequest(
            apiKey: apiKey
        )
        return try await self.deleteApiKey(input, logger: logger)
    }

    /// Deletes an existing Authorizer resource.
    @Sendable
    @inlinable
    public func deleteAuthorizer(_ input: DeleteAuthorizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteAuthorizer", 
            path: "/restapis/{restApiId}/authorizers/{authorizerId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing Authorizer resource.
    ///
    /// Parameters:
    ///   - authorizerId: The identifier of the Authorizer resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAuthorizer(
        authorizerId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteAuthorizerRequest(
            authorizerId: authorizerId, 
            restApiId: restApiId
        )
        return try await self.deleteAuthorizer(input, logger: logger)
    }

    /// Deletes the BasePathMapping resource.
    @Sendable
    @inlinable
    public func deleteBasePathMapping(_ input: DeleteBasePathMappingRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteBasePathMapping", 
            path: "/domainnames/{domainName}/basepathmappings/{basePath}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the BasePathMapping resource.
    ///
    /// Parameters:
    ///   - basePath: The base path name of the BasePathMapping resource to delete. To specify an empty base path, set this parameter to '(none)'.
    ///   - domainName: The domain name of the BasePathMapping resource to delete.
    ///   - domainNameId:  The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBasePathMapping(
        basePath: String,
        domainName: String,
        domainNameId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteBasePathMappingRequest(
            basePath: basePath, 
            domainName: domainName, 
            domainNameId: domainNameId
        )
        return try await self.deleteBasePathMapping(input, logger: logger)
    }

    /// Deletes the ClientCertificate resource.
    @Sendable
    @inlinable
    public func deleteClientCertificate(_ input: DeleteClientCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteClientCertificate", 
            path: "/clientcertificates/{clientCertificateId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the ClientCertificate resource.
    ///
    /// Parameters:
    ///   - clientCertificateId: The identifier of the ClientCertificate resource to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteClientCertificate(
        clientCertificateId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteClientCertificateRequest(
            clientCertificateId: clientCertificateId
        )
        return try await self.deleteClientCertificate(input, logger: logger)
    }

    /// Deletes a Deployment resource. Deleting a deployment will only succeed if there are no Stage resources associated with it.
    @Sendable
    @inlinable
    public func deleteDeployment(_ input: DeleteDeploymentRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDeployment", 
            path: "/restapis/{restApiId}/deployments/{deploymentId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Deployment resource. Deleting a deployment will only succeed if there are no Stage resources associated with it.
    ///
    /// Parameters:
    ///   - deploymentId: The identifier of the Deployment resource to delete.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDeployment(
        deploymentId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDeploymentRequest(
            deploymentId: deploymentId, 
            restApiId: restApiId
        )
        return try await self.deleteDeployment(input, logger: logger)
    }

    /// Deletes a documentation part
    @Sendable
    @inlinable
    public func deleteDocumentationPart(_ input: DeleteDocumentationPartRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDocumentationPart", 
            path: "/restapis/{restApiId}/documentation/parts/{documentationPartId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a documentation part
    ///
    /// Parameters:
    ///   - documentationPartId: The identifier of the to-be-deleted documentation part.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDocumentationPart(
        documentationPartId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDocumentationPartRequest(
            documentationPartId: documentationPartId, 
            restApiId: restApiId
        )
        return try await self.deleteDocumentationPart(input, logger: logger)
    }

    /// Deletes a documentation version.
    @Sendable
    @inlinable
    public func deleteDocumentationVersion(_ input: DeleteDocumentationVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDocumentationVersion", 
            path: "/restapis/{restApiId}/documentation/versions/{documentationVersion}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a documentation version.
    ///
    /// Parameters:
    ///   - documentationVersion: The version identifier of a to-be-deleted documentation snapshot.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDocumentationVersion(
        documentationVersion: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDocumentationVersionRequest(
            documentationVersion: documentationVersion, 
            restApiId: restApiId
        )
        return try await self.deleteDocumentationVersion(input, logger: logger)
    }

    /// Deletes the DomainName resource.
    @Sendable
    @inlinable
    public func deleteDomainName(_ input: DeleteDomainNameRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDomainName", 
            path: "/domainnames/{domainName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the DomainName resource.
    ///
    /// Parameters:
    ///   - domainName: The name of the DomainName resource to be deleted.
    ///   - domainNameId:  The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDomainName(
        domainName: String,
        domainNameId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDomainNameRequest(
            domainName: domainName, 
            domainNameId: domainNameId
        )
        return try await self.deleteDomainName(input, logger: logger)
    }

    ///  Deletes the DomainNameAccessAssociation resource. Only the AWS account that created the DomainNameAccessAssociation resource can delete it. To stop an access association source in another AWS account from accessing your private custom domain name, use the RejectDomainNameAccessAssociation operation.
    @Sendable
    @inlinable
    public func deleteDomainNameAccessAssociation(_ input: DeleteDomainNameAccessAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDomainNameAccessAssociation", 
            path: "/domainnameaccessassociations/{domainNameAccessAssociationArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Deletes the DomainNameAccessAssociation resource. Only the AWS account that created the DomainNameAccessAssociation resource can delete it. To stop an access association source in another AWS account from accessing your private custom domain name, use the RejectDomainNameAccessAssociation operation.
    ///
    /// Parameters:
    ///   - domainNameAccessAssociationArn:  The ARN of the domain name access association resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDomainNameAccessAssociation(
        domainNameAccessAssociationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDomainNameAccessAssociationRequest(
            domainNameAccessAssociationArn: domainNameAccessAssociationArn
        )
        return try await self.deleteDomainNameAccessAssociation(input, logger: logger)
    }

    /// Clears any customization of a GatewayResponse of a specified response type on the given RestApi and resets it with the default settings.
    @Sendable
    @inlinable
    public func deleteGatewayResponse(_ input: DeleteGatewayResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteGatewayResponse", 
            path: "/restapis/{restApiId}/gatewayresponses/{responseType}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Clears any customization of a GatewayResponse of a specified response type on the given RestApi and resets it with the default settings.
    ///
    /// Parameters:
    ///   - responseType: The response type of the associated GatewayResponse.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteGatewayResponse(
        responseType: GatewayResponseType,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteGatewayResponseRequest(
            responseType: responseType, 
            restApiId: restApiId
        )
        return try await self.deleteGatewayResponse(input, logger: logger)
    }

    /// Represents a delete integration.
    @Sendable
    @inlinable
    public func deleteIntegration(_ input: DeleteIntegrationRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteIntegration", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a delete integration.
    ///
    /// Parameters:
    ///   - httpMethod: Specifies a delete integration request's HTTP method.
    ///   - resourceId: Specifies a delete integration request's resource identifier.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteIntegration(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteIntegrationRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.deleteIntegration(input, logger: logger)
    }

    /// Represents a delete integration response.
    @Sendable
    @inlinable
    public func deleteIntegrationResponse(_ input: DeleteIntegrationResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteIntegrationResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration/responses/{statusCode}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a delete integration response.
    ///
    /// Parameters:
    ///   - httpMethod: Specifies a delete integration response request's HTTP method.
    ///   - resourceId: Specifies a delete integration response request's resource identifier.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: Specifies a delete integration response request's status code.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteIntegrationResponse(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteIntegrationResponseRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.deleteIntegrationResponse(input, logger: logger)
    }

    /// Deletes an existing Method resource.
    @Sendable
    @inlinable
    public func deleteMethod(_ input: DeleteMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteMethod", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing Method resource.
    ///
    /// Parameters:
    ///   - httpMethod: The HTTP verb of the Method resource.
    ///   - resourceId: The Resource identifier for the Method resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMethod(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteMethodRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.deleteMethod(input, logger: logger)
    }

    /// Deletes an existing MethodResponse resource.
    @Sendable
    @inlinable
    public func deleteMethodResponse(_ input: DeleteMethodResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteMethodResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/responses/{statusCode}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing MethodResponse resource.
    ///
    /// Parameters:
    ///   - httpMethod: The HTTP verb of the Method resource.
    ///   - resourceId: The Resource identifier for the MethodResponse resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: The status code identifier for the MethodResponse resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMethodResponse(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteMethodResponseRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.deleteMethodResponse(input, logger: logger)
    }

    /// Deletes a model.
    @Sendable
    @inlinable
    public func deleteModel(_ input: DeleteModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteModel", 
            path: "/restapis/{restApiId}/models/{modelName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a model.
    ///
    /// Parameters:
    ///   - modelName: The name of the model to delete.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteModel(
        modelName: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteModelRequest(
            modelName: modelName, 
            restApiId: restApiId
        )
        return try await self.deleteModel(input, logger: logger)
    }

    /// Deletes a RequestValidator of a given RestApi.
    @Sendable
    @inlinable
    public func deleteRequestValidator(_ input: DeleteRequestValidatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteRequestValidator", 
            path: "/restapis/{restApiId}/requestvalidators/{requestValidatorId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a RequestValidator of a given RestApi.
    ///
    /// Parameters:
    ///   - requestValidatorId: The identifier of the RequestValidator to be deleted.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRequestValidator(
        requestValidatorId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteRequestValidatorRequest(
            requestValidatorId: requestValidatorId, 
            restApiId: restApiId
        )
        return try await self.deleteRequestValidator(input, logger: logger)
    }

    /// Deletes a Resource resource.
    @Sendable
    @inlinable
    public func deleteResource(_ input: DeleteResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteResource", 
            path: "/restapis/{restApiId}/resources/{resourceId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Resource resource.
    ///
    /// Parameters:
    ///   - resourceId: The identifier of the Resource resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteResource(
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteResourceRequest(
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.deleteResource(input, logger: logger)
    }

    /// Deletes the specified API.
    @Sendable
    @inlinable
    public func deleteRestApi(_ input: DeleteRestApiRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteRestApi", 
            path: "/restapis/{restApiId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified API.
    ///
    /// Parameters:
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRestApi(
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteRestApiRequest(
            restApiId: restApiId
        )
        return try await self.deleteRestApi(input, logger: logger)
    }

    /// Deletes a Stage resource.
    @Sendable
    @inlinable
    public func deleteStage(_ input: DeleteStageRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteStage", 
            path: "/restapis/{restApiId}/stages/{stageName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Stage resource.
    ///
    /// Parameters:
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name of the Stage resource to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteStage(
        restApiId: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteStageRequest(
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.deleteStage(input, logger: logger)
    }

    /// Deletes a usage plan of a given plan Id.
    @Sendable
    @inlinable
    public func deleteUsagePlan(_ input: DeleteUsagePlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteUsagePlan", 
            path: "/usageplans/{usagePlanId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a usage plan of a given plan Id.
    ///
    /// Parameters:
    ///   - usagePlanId: The Id of the to-be-deleted usage plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteUsagePlan(
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteUsagePlanRequest(
            usagePlanId: usagePlanId
        )
        return try await self.deleteUsagePlan(input, logger: logger)
    }

    /// Deletes a usage plan key  and remove the underlying API key from the associated usage plan.
    @Sendable
    @inlinable
    public func deleteUsagePlanKey(_ input: DeleteUsagePlanKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteUsagePlanKey", 
            path: "/usageplans/{usagePlanId}/keys/{keyId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a usage plan key  and remove the underlying API key from the associated usage plan.
    ///
    /// Parameters:
    ///   - keyId: The Id of the UsagePlanKey resource to be deleted.
    ///   - usagePlanId: The Id of the UsagePlan resource representing the usage plan containing the to-be-deleted UsagePlanKey resource representing a plan customer.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteUsagePlanKey(
        keyId: String,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteUsagePlanKeyRequest(
            keyId: keyId, 
            usagePlanId: usagePlanId
        )
        return try await self.deleteUsagePlanKey(input, logger: logger)
    }

    /// Deletes an existing VpcLink of a specified identifier.
    @Sendable
    @inlinable
    public func deleteVpcLink(_ input: DeleteVpcLinkRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteVpcLink", 
            path: "/vpclinks/{vpcLinkId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an existing VpcLink of a specified identifier.
    ///
    /// Parameters:
    ///   - vpcLinkId: The identifier of the  VpcLink. It is used in an Integration to reference this VpcLink.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteVpcLink(
        vpcLinkId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteVpcLinkRequest(
            vpcLinkId: vpcLinkId
        )
        return try await self.deleteVpcLink(input, logger: logger)
    }

    /// Flushes all authorizer cache entries on a stage.
    @Sendable
    @inlinable
    public func flushStageAuthorizersCache(_ input: FlushStageAuthorizersCacheRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "FlushStageAuthorizersCache", 
            path: "/restapis/{restApiId}/stages/{stageName}/cache/authorizers", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Flushes all authorizer cache entries on a stage.
    ///
    /// Parameters:
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name of the stage to flush.
    ///   - logger: Logger use during operation
    @inlinable
    public func flushStageAuthorizersCache(
        restApiId: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = FlushStageAuthorizersCacheRequest(
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.flushStageAuthorizersCache(input, logger: logger)
    }

    /// Flushes a stage's cache.
    @Sendable
    @inlinable
    public func flushStageCache(_ input: FlushStageCacheRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "FlushStageCache", 
            path: "/restapis/{restApiId}/stages/{stageName}/cache/data", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Flushes a stage's cache.
    ///
    /// Parameters:
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name of the stage to flush its cache.
    ///   - logger: Logger use during operation
    @inlinable
    public func flushStageCache(
        restApiId: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = FlushStageCacheRequest(
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.flushStageCache(input, logger: logger)
    }

    /// Generates a ClientCertificate resource.
    @Sendable
    @inlinable
    public func generateClientCertificate(_ input: GenerateClientCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ClientCertificate {
        try await self.client.execute(
            operation: "GenerateClientCertificate", 
            path: "/clientcertificates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates a ClientCertificate resource.
    ///
    /// Parameters:
    ///   - description: The description of the ClientCertificate.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func generateClientCertificate(
        description: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ClientCertificate {
        let input = GenerateClientCertificateRequest(
            description: description, 
            tags: tags
        )
        return try await self.generateClientCertificate(input, logger: logger)
    }

    /// Gets information about the current Account resource.
    @Sendable
    @inlinable
    public func getAccount(_ input: GetAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Account {
        try await self.client.execute(
            operation: "GetAccount", 
            path: "/account", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about the current Account resource.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getAccount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Account {
        let input = GetAccountRequest(
        )
        return try await self.getAccount(input, logger: logger)
    }

    /// Gets information about the current ApiKey resource.
    @Sendable
    @inlinable
    public func getApiKey(_ input: GetApiKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ApiKey {
        try await self.client.execute(
            operation: "GetApiKey", 
            path: "/apikeys/{apiKey}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about the current ApiKey resource.
    ///
    /// Parameters:
    ///   - apiKey: The identifier of the ApiKey resource.
    ///   - includeValue: A boolean flag to specify whether (true) or not (false) the result contains the key value.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApiKey(
        apiKey: String,
        includeValue: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ApiKey {
        let input = GetApiKeyRequest(
            apiKey: apiKey, 
            includeValue: includeValue
        )
        return try await self.getApiKey(input, logger: logger)
    }

    /// Gets information about the current ApiKeys resource.
    @Sendable
    @inlinable
    public func getApiKeys(_ input: GetApiKeysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ApiKeys {
        try await self.client.execute(
            operation: "GetApiKeys", 
            path: "/apikeys", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about the current ApiKeys resource.
    ///
    /// Parameters:
    ///   - customerId: The identifier of a customer in Amazon Web Services Marketplace or an external system, such as a developer portal.
    ///   - includeValues: A boolean flag to specify whether (true) or not (false) the result contains key values.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - nameQuery: The name of queried API keys.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApiKeys(
        customerId: String? = nil,
        includeValues: Bool? = nil,
        limit: Int? = nil,
        nameQuery: String? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ApiKeys {
        let input = GetApiKeysRequest(
            customerId: customerId, 
            includeValues: includeValues, 
            limit: limit, 
            nameQuery: nameQuery, 
            position: position
        )
        return try await self.getApiKeys(input, logger: logger)
    }

    /// Describe an existing Authorizer resource.
    @Sendable
    @inlinable
    public func getAuthorizer(_ input: GetAuthorizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Authorizer {
        try await self.client.execute(
            operation: "GetAuthorizer", 
            path: "/restapis/{restApiId}/authorizers/{authorizerId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe an existing Authorizer resource.
    ///
    /// Parameters:
    ///   - authorizerId: The identifier of the Authorizer resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAuthorizer(
        authorizerId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Authorizer {
        let input = GetAuthorizerRequest(
            authorizerId: authorizerId, 
            restApiId: restApiId
        )
        return try await self.getAuthorizer(input, logger: logger)
    }

    /// Describe an existing Authorizers resource.
    @Sendable
    @inlinable
    public func getAuthorizers(_ input: GetAuthorizersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Authorizers {
        try await self.client.execute(
            operation: "GetAuthorizers", 
            path: "/restapis/{restApiId}/authorizers", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe an existing Authorizers resource.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAuthorizers(
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Authorizers {
        let input = GetAuthorizersRequest(
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getAuthorizers(input, logger: logger)
    }

    /// Describe a BasePathMapping resource.
    @Sendable
    @inlinable
    public func getBasePathMapping(_ input: GetBasePathMappingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BasePathMapping {
        try await self.client.execute(
            operation: "GetBasePathMapping", 
            path: "/domainnames/{domainName}/basepathmappings/{basePath}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe a BasePathMapping resource.
    ///
    /// Parameters:
    ///   - basePath: The base path name that callers of the API must provide as part of the URL after the domain name. This value must be unique for all of the mappings across a single API. Specify '(none)' if you do not want callers to specify any base path name after the domain name.
    ///   - domainName: The domain name of the BasePathMapping resource to be described.
    ///   - domainNameId: The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBasePathMapping(
        basePath: String,
        domainName: String,
        domainNameId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BasePathMapping {
        let input = GetBasePathMappingRequest(
            basePath: basePath, 
            domainName: domainName, 
            domainNameId: domainNameId
        )
        return try await self.getBasePathMapping(input, logger: logger)
    }

    /// Represents a collection of BasePathMapping resources.
    @Sendable
    @inlinable
    public func getBasePathMappings(_ input: GetBasePathMappingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BasePathMappings {
        try await self.client.execute(
            operation: "GetBasePathMappings", 
            path: "/domainnames/{domainName}/basepathmappings", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a collection of BasePathMapping resources.
    ///
    /// Parameters:
    ///   - domainName: The domain name of a BasePathMapping resource.
    ///   - domainNameId:  The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBasePathMappings(
        domainName: String,
        domainNameId: String? = nil,
        limit: Int? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BasePathMappings {
        let input = GetBasePathMappingsRequest(
            domainName: domainName, 
            domainNameId: domainNameId, 
            limit: limit, 
            position: position
        )
        return try await self.getBasePathMappings(input, logger: logger)
    }

    /// Gets information about the current ClientCertificate resource.
    @Sendable
    @inlinable
    public func getClientCertificate(_ input: GetClientCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ClientCertificate {
        try await self.client.execute(
            operation: "GetClientCertificate", 
            path: "/clientcertificates/{clientCertificateId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about the current ClientCertificate resource.
    ///
    /// Parameters:
    ///   - clientCertificateId: The identifier of the ClientCertificate resource to be described.
    ///   - logger: Logger use during operation
    @inlinable
    public func getClientCertificate(
        clientCertificateId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ClientCertificate {
        let input = GetClientCertificateRequest(
            clientCertificateId: clientCertificateId
        )
        return try await self.getClientCertificate(input, logger: logger)
    }

    /// Gets a collection of ClientCertificate resources.
    @Sendable
    @inlinable
    public func getClientCertificates(_ input: GetClientCertificatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ClientCertificates {
        try await self.client.execute(
            operation: "GetClientCertificates", 
            path: "/clientcertificates", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a collection of ClientCertificate resources.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getClientCertificates(
        limit: Int? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ClientCertificates {
        let input = GetClientCertificatesRequest(
            limit: limit, 
            position: position
        )
        return try await self.getClientCertificates(input, logger: logger)
    }

    /// Gets information about a Deployment resource.
    @Sendable
    @inlinable
    public func getDeployment(_ input: GetDeploymentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Deployment {
        try await self.client.execute(
            operation: "GetDeployment", 
            path: "/restapis/{restApiId}/deployments/{deploymentId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about a Deployment resource.
    ///
    /// Parameters:
    ///   - deploymentId: The identifier of the Deployment resource to get information about.
    ///   - embed: A query parameter to retrieve the specified embedded resources of the returned Deployment resource in the response. In a REST API call, this embed parameter value is a list of comma-separated strings, as in  GET /restapis/{restapi_id}/deployments/{deployment_id}?embed=var1,var2. The SDK and other platform-dependent libraries might use a different format for the list. Currently, this request supports only retrieval of the embedded API summary this way. Hence, the parameter value must be a single-valued list containing only the "apisummary" string.  For example, GET /restapis/{restapi_id}/deployments/{deployment_id}?embed=apisummary.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDeployment(
        deploymentId: String,
        embed: [String]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Deployment {
        let input = GetDeploymentRequest(
            deploymentId: deploymentId, 
            embed: embed, 
            restApiId: restApiId
        )
        return try await self.getDeployment(input, logger: logger)
    }

    /// Gets information about a Deployments collection.
    @Sendable
    @inlinable
    public func getDeployments(_ input: GetDeploymentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Deployments {
        try await self.client.execute(
            operation: "GetDeployments", 
            path: "/restapis/{restApiId}/deployments", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about a Deployments collection.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDeployments(
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Deployments {
        let input = GetDeploymentsRequest(
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getDeployments(input, logger: logger)
    }

    /// Gets a documentation part.
    @Sendable
    @inlinable
    public func getDocumentationPart(_ input: GetDocumentationPartRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationPart {
        try await self.client.execute(
            operation: "GetDocumentationPart", 
            path: "/restapis/{restApiId}/documentation/parts/{documentationPartId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a documentation part.
    ///
    /// Parameters:
    ///   - documentationPartId: The string identifier of the associated RestApi.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocumentationPart(
        documentationPartId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationPart {
        let input = GetDocumentationPartRequest(
            documentationPartId: documentationPartId, 
            restApiId: restApiId
        )
        return try await self.getDocumentationPart(input, logger: logger)
    }

    /// Gets documentation parts.
    @Sendable
    @inlinable
    public func getDocumentationParts(_ input: GetDocumentationPartsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationParts {
        try await self.client.execute(
            operation: "GetDocumentationParts", 
            path: "/restapis/{restApiId}/documentation/parts", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets documentation parts.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - locationStatus: The status of the API documentation parts to retrieve. Valid values are DOCUMENTED for retrieving DocumentationPart resources with content and UNDOCUMENTED for DocumentationPart resources without content.
    ///   - nameQuery: The name of API entities of the to-be-retrieved documentation parts.
    ///   - path: The path of API entities of the to-be-retrieved documentation parts.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - type: The type of API entities of the to-be-retrieved documentation parts.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocumentationParts(
        limit: Int? = nil,
        locationStatus: LocationStatusType? = nil,
        nameQuery: String? = nil,
        path: String? = nil,
        position: String? = nil,
        restApiId: String,
        type: DocumentationPartType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationParts {
        let input = GetDocumentationPartsRequest(
            limit: limit, 
            locationStatus: locationStatus, 
            nameQuery: nameQuery, 
            path: path, 
            position: position, 
            restApiId: restApiId, 
            type: type
        )
        return try await self.getDocumentationParts(input, logger: logger)
    }

    /// Gets a documentation version.
    @Sendable
    @inlinable
    public func getDocumentationVersion(_ input: GetDocumentationVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationVersion {
        try await self.client.execute(
            operation: "GetDocumentationVersion", 
            path: "/restapis/{restApiId}/documentation/versions/{documentationVersion}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a documentation version.
    ///
    /// Parameters:
    ///   - documentationVersion: The version identifier of the to-be-retrieved documentation snapshot.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocumentationVersion(
        documentationVersion: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationVersion {
        let input = GetDocumentationVersionRequest(
            documentationVersion: documentationVersion, 
            restApiId: restApiId
        )
        return try await self.getDocumentationVersion(input, logger: logger)
    }

    /// Gets documentation versions.
    @Sendable
    @inlinable
    public func getDocumentationVersions(_ input: GetDocumentationVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationVersions {
        try await self.client.execute(
            operation: "GetDocumentationVersions", 
            path: "/restapis/{restApiId}/documentation/versions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets documentation versions.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocumentationVersions(
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationVersions {
        let input = GetDocumentationVersionsRequest(
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getDocumentationVersions(input, logger: logger)
    }

    /// Represents a domain name that is contained in a simpler, more intuitive URL that can be called.
    @Sendable
    @inlinable
    public func getDomainName(_ input: GetDomainNameRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DomainName {
        try await self.client.execute(
            operation: "GetDomainName", 
            path: "/domainnames/{domainName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a domain name that is contained in a simpler, more intuitive URL that can be called.
    ///
    /// Parameters:
    ///   - domainName: The name of the DomainName resource.
    ///   - domainNameId:  The identifier for the domain name resource. Required for private custom domain names.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomainName(
        domainName: String,
        domainNameId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DomainName {
        let input = GetDomainNameRequest(
            domainName: domainName, 
            domainNameId: domainNameId
        )
        return try await self.getDomainName(input, logger: logger)
    }

    /// Represents a collection on DomainNameAccessAssociations resources.
    @Sendable
    @inlinable
    public func getDomainNameAccessAssociations(_ input: GetDomainNameAccessAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DomainNameAccessAssociations {
        try await self.client.execute(
            operation: "GetDomainNameAccessAssociations", 
            path: "/domainnameaccessassociations", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a collection on DomainNameAccessAssociations resources.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - resourceOwner:  The owner of the domain name access association. Use SELF to only list the domain name access associations owned by your own account. Use OTHER_ACCOUNTS to list the domain name access associations with your private custom domain names that are owned by other AWS accounts.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomainNameAccessAssociations(
        limit: Int? = nil,
        position: String? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DomainNameAccessAssociations {
        let input = GetDomainNameAccessAssociationsRequest(
            limit: limit, 
            position: position, 
            resourceOwner: resourceOwner
        )
        return try await self.getDomainNameAccessAssociations(input, logger: logger)
    }

    /// Represents a collection of DomainName resources.
    @Sendable
    @inlinable
    public func getDomainNames(_ input: GetDomainNamesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DomainNames {
        try await self.client.execute(
            operation: "GetDomainNames", 
            path: "/domainnames", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a collection of DomainName resources.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - resourceOwner: The owner of the domain name access association.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomainNames(
        limit: Int? = nil,
        position: String? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DomainNames {
        let input = GetDomainNamesRequest(
            limit: limit, 
            position: position, 
            resourceOwner: resourceOwner
        )
        return try await self.getDomainNames(input, logger: logger)
    }

    /// Exports a deployed version of a RestApi in a specified format.
    @Sendable
    @inlinable
    public func getExport(_ input: GetExportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ExportResponse {
        try await self.client.execute(
            operation: "GetExport", 
            path: "/restapis/{restApiId}/stages/{stageName}/exports/{exportType}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Exports a deployed version of a RestApi in a specified format.
    ///
    /// Parameters:
    ///   - accepts: The content-type of the export, for example application/json. Currently application/json and application/yaml are supported for exportType ofoas30 and swagger. This should be specified in the Accept header for direct API requests.
    ///   - exportType: The type of export. Acceptable values are 'oas30' for OpenAPI 3.0.x and 'swagger' for Swagger/OpenAPI 2.0.
    ///   - parameters: A key-value map of query string parameters that specify properties of the export, depending on the requested exportType. For exportType oas30 and swagger, any combination of the following parameters are supported: extensions='integrations' or extensions='apigateway' will export the API with x-amazon-apigateway-integration extensions. extensions='authorizers' will export the API with  x-amazon-apigateway-authorizer extensions. postman will export the API with Postman extensions, allowing for import to the Postman tool
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name of the Stage that will be exported.
    ///   - logger: Logger use during operation
    @inlinable
    public func getExport(
        accepts: String? = nil,
        exportType: String,
        parameters: [String: String]? = nil,
        restApiId: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ExportResponse {
        let input = GetExportRequest(
            accepts: accepts, 
            exportType: exportType, 
            parameters: parameters, 
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.getExport(input, logger: logger)
    }

    /// Gets a GatewayResponse of a specified response type on the given RestApi.
    @Sendable
    @inlinable
    public func getGatewayResponse(_ input: GetGatewayResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GatewayResponse {
        try await self.client.execute(
            operation: "GetGatewayResponse", 
            path: "/restapis/{restApiId}/gatewayresponses/{responseType}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a GatewayResponse of a specified response type on the given RestApi.
    ///
    /// Parameters:
    ///   - responseType: The response type of the associated GatewayResponse.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getGatewayResponse(
        responseType: GatewayResponseType,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GatewayResponse {
        let input = GetGatewayResponseRequest(
            responseType: responseType, 
            restApiId: restApiId
        )
        return try await self.getGatewayResponse(input, logger: logger)
    }

    /// Gets the GatewayResponses collection on the given RestApi. If an API developer has not added any definitions for gateway responses, the result will be the API Gateway-generated default GatewayResponses collection for the supported response types.
    @Sendable
    @inlinable
    public func getGatewayResponses(_ input: GetGatewayResponsesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GatewayResponses {
        try await self.client.execute(
            operation: "GetGatewayResponses", 
            path: "/restapis/{restApiId}/gatewayresponses", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the GatewayResponses collection on the given RestApi. If an API developer has not added any definitions for gateway responses, the result will be the API Gateway-generated default GatewayResponses collection for the supported response types.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500. The GatewayResponses collection does not support pagination and the limit does not apply here.
    ///   - position: The current pagination position in the paged result set. The GatewayResponse collection does not support pagination and the position does not apply here.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getGatewayResponses(
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GatewayResponses {
        let input = GetGatewayResponsesRequest(
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getGatewayResponses(input, logger: logger)
    }

    /// Get the integration settings.
    @Sendable
    @inlinable
    public func getIntegration(_ input: GetIntegrationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Integration {
        try await self.client.execute(
            operation: "GetIntegration", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get the integration settings.
    ///
    /// Parameters:
    ///   - httpMethod: Specifies a get integration request's HTTP method.
    ///   - resourceId: Specifies a get integration request's resource identifier
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getIntegration(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Integration {
        let input = GetIntegrationRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.getIntegration(input, logger: logger)
    }

    /// Represents a get integration response.
    @Sendable
    @inlinable
    public func getIntegrationResponse(_ input: GetIntegrationResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> IntegrationResponse {
        try await self.client.execute(
            operation: "GetIntegrationResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration/responses/{statusCode}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a get integration response.
    ///
    /// Parameters:
    ///   - httpMethod: Specifies a get integration response request's HTTP method.
    ///   - resourceId: Specifies a get integration response request's resource identifier.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: Specifies a get integration response request's status code.
    ///   - logger: Logger use during operation
    @inlinable
    public func getIntegrationResponse(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> IntegrationResponse {
        let input = GetIntegrationResponseRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.getIntegrationResponse(input, logger: logger)
    }

    /// Describe an existing Method resource.
    @Sendable
    @inlinable
    public func getMethod(_ input: GetMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Method {
        try await self.client.execute(
            operation: "GetMethod", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe an existing Method resource.
    ///
    /// Parameters:
    ///   - httpMethod: Specifies the method request's HTTP method type.
    ///   - resourceId: The Resource identifier for the Method resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMethod(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Method {
        let input = GetMethodRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.getMethod(input, logger: logger)
    }

    /// Describes a MethodResponse resource.
    @Sendable
    @inlinable
    public func getMethodResponse(_ input: GetMethodResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> MethodResponse {
        try await self.client.execute(
            operation: "GetMethodResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/responses/{statusCode}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a MethodResponse resource.
    ///
    /// Parameters:
    ///   - httpMethod: The HTTP verb of the Method resource.
    ///   - resourceId: The Resource identifier for the MethodResponse resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: The status code for the MethodResponse resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMethodResponse(
        httpMethod: String,
        resourceId: String,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> MethodResponse {
        let input = GetMethodResponseRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.getMethodResponse(input, logger: logger)
    }

    /// Describes an existing model defined for a RestApi resource.
    @Sendable
    @inlinable
    public func getModel(_ input: GetModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Model {
        try await self.client.execute(
            operation: "GetModel", 
            path: "/restapis/{restApiId}/models/{modelName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes an existing model defined for a RestApi resource.
    ///
    /// Parameters:
    ///   - flatten: A query parameter of a Boolean value to resolve (true) all external model references and returns a flattened model schema or not (false) The default is false.
    ///   - modelName: The name of the model as an identifier.
    ///   - restApiId: The RestApi identifier under which the Model exists.
    ///   - logger: Logger use during operation
    @inlinable
    public func getModel(
        flatten: Bool? = nil,
        modelName: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Model {
        let input = GetModelRequest(
            flatten: flatten, 
            modelName: modelName, 
            restApiId: restApiId
        )
        return try await self.getModel(input, logger: logger)
    }

    /// Generates a sample mapping template that can be used to transform a payload into the structure of a model.
    @Sendable
    @inlinable
    public func getModelTemplate(_ input: GetModelTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Template {
        try await self.client.execute(
            operation: "GetModelTemplate", 
            path: "/restapis/{restApiId}/models/{modelName}/default_template", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates a sample mapping template that can be used to transform a payload into the structure of a model.
    ///
    /// Parameters:
    ///   - modelName: The name of the model for which to generate a template.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getModelTemplate(
        modelName: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Template {
        let input = GetModelTemplateRequest(
            modelName: modelName, 
            restApiId: restApiId
        )
        return try await self.getModelTemplate(input, logger: logger)
    }

    /// Describes existing Models defined for a RestApi resource.
    @Sendable
    @inlinable
    public func getModels(_ input: GetModelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Models {
        try await self.client.execute(
            operation: "GetModels", 
            path: "/restapis/{restApiId}/models", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes existing Models defined for a RestApi resource.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getModels(
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Models {
        let input = GetModelsRequest(
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getModels(input, logger: logger)
    }

    /// Gets a RequestValidator of a given RestApi.
    @Sendable
    @inlinable
    public func getRequestValidator(_ input: GetRequestValidatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RequestValidator {
        try await self.client.execute(
            operation: "GetRequestValidator", 
            path: "/restapis/{restApiId}/requestvalidators/{requestValidatorId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a RequestValidator of a given RestApi.
    ///
    /// Parameters:
    ///   - requestValidatorId: The identifier of the RequestValidator to be retrieved.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRequestValidator(
        requestValidatorId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RequestValidator {
        let input = GetRequestValidatorRequest(
            requestValidatorId: requestValidatorId, 
            restApiId: restApiId
        )
        return try await self.getRequestValidator(input, logger: logger)
    }

    /// Gets the RequestValidators collection of a given RestApi.
    @Sendable
    @inlinable
    public func getRequestValidators(_ input: GetRequestValidatorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RequestValidators {
        try await self.client.execute(
            operation: "GetRequestValidators", 
            path: "/restapis/{restApiId}/requestvalidators", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the RequestValidators collection of a given RestApi.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRequestValidators(
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RequestValidators {
        let input = GetRequestValidatorsRequest(
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getRequestValidators(input, logger: logger)
    }

    /// Lists information about a resource.
    @Sendable
    @inlinable
    public func getResource(_ input: GetResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Resource {
        try await self.client.execute(
            operation: "GetResource", 
            path: "/restapis/{restApiId}/resources/{resourceId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists information about a resource.
    ///
    /// Parameters:
    ///   - embed: A query parameter to retrieve the specified resources embedded in the returned Resource representation in the response. This embed parameter value is a list of comma-separated strings. Currently, the request supports only retrieval of the embedded Method resources this way. The query parameter value must be a single-valued list and contain the "methods" string. For example, GET /restapis/{restapi_id}/resources/{resource_id}?embed=methods.
    ///   - resourceId: The identifier for the Resource resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResource(
        embed: [String]? = nil,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Resource {
        let input = GetResourceRequest(
            embed: embed, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.getResource(input, logger: logger)
    }

    /// Lists information about a collection of Resource resources.
    @Sendable
    @inlinable
    public func getResources(_ input: GetResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Resources {
        try await self.client.execute(
            operation: "GetResources", 
            path: "/restapis/{restApiId}/resources", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists information about a collection of Resource resources.
    ///
    /// Parameters:
    ///   - embed: A query parameter used to retrieve the specified resources embedded in the returned Resources resource in the response.  This embed parameter value is a list of comma-separated strings. Currently, the request supports only retrieval of the embedded Method resources this way. The query parameter value must be a single-valued list and contain the "methods" string. For example, GET /restapis/{restapi_id}/resources?embed=methods.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResources(
        embed: [String]? = nil,
        limit: Int? = nil,
        position: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Resources {
        let input = GetResourcesRequest(
            embed: embed, 
            limit: limit, 
            position: position, 
            restApiId: restApiId
        )
        return try await self.getResources(input, logger: logger)
    }

    /// Lists the RestApi resource in the collection.
    @Sendable
    @inlinable
    public func getRestApi(_ input: GetRestApiRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestApi {
        try await self.client.execute(
            operation: "GetRestApi", 
            path: "/restapis/{restApiId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the RestApi resource in the collection.
    ///
    /// Parameters:
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRestApi(
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestApi {
        let input = GetRestApiRequest(
            restApiId: restApiId
        )
        return try await self.getRestApi(input, logger: logger)
    }

    /// Lists the RestApis resources for your collection.
    @Sendable
    @inlinable
    public func getRestApis(_ input: GetRestApisRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestApis {
        try await self.client.execute(
            operation: "GetRestApis", 
            path: "/restapis", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the RestApis resources for your collection.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRestApis(
        limit: Int? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestApis {
        let input = GetRestApisRequest(
            limit: limit, 
            position: position
        )
        return try await self.getRestApis(input, logger: logger)
    }

    /// Generates a client SDK for a RestApi and Stage.
    @Sendable
    @inlinable
    public func getSdk(_ input: GetSdkRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SdkResponse {
        try await self.client.execute(
            operation: "GetSdk", 
            path: "/restapis/{restApiId}/stages/{stageName}/sdks/{sdkType}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates a client SDK for a RestApi and Stage.
    ///
    /// Parameters:
    ///   - parameters: A string-to-string key-value map of query parameters sdkType-dependent properties of the SDK. For sdkType of objectivec or swift,  a parameter named classPrefix is required. For sdkType of android, parameters named groupId, artifactId, artifactVersion, and invokerPackage are required. For sdkType of java, parameters named serviceName and javaPackageName are required.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - sdkType: The language for the generated SDK. Currently java, javascript, android, objectivec (for iOS), swift (for iOS), and ruby  are supported.
    ///   - stageName: The name of the Stage that the SDK will use.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSdk(
        parameters: [String: String]? = nil,
        restApiId: String,
        sdkType: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SdkResponse {
        let input = GetSdkRequest(
            parameters: parameters, 
            restApiId: restApiId, 
            sdkType: sdkType, 
            stageName: stageName
        )
        return try await self.getSdk(input, logger: logger)
    }

    /// Gets an SDK type.
    @Sendable
    @inlinable
    public func getSdkType(_ input: GetSdkTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SdkType {
        try await self.client.execute(
            operation: "GetSdkType", 
            path: "/sdktypes/{id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets an SDK type.
    ///
    /// Parameters:
    ///   - id: The identifier of the queried SdkType instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSdkType(
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SdkType {
        let input = GetSdkTypeRequest(
            id: id
        )
        return try await self.getSdkType(input, logger: logger)
    }

    /// Gets SDK types
    @Sendable
    @inlinable
    public func getSdkTypes(_ input: GetSdkTypesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SdkTypes {
        try await self.client.execute(
            operation: "GetSdkTypes", 
            path: "/sdktypes", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets SDK types
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSdkTypes(
        limit: Int? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SdkTypes {
        let input = GetSdkTypesRequest(
            limit: limit, 
            position: position
        )
        return try await self.getSdkTypes(input, logger: logger)
    }

    /// Gets information about a Stage resource.
    @Sendable
    @inlinable
    public func getStage(_ input: GetStageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Stage {
        try await self.client.execute(
            operation: "GetStage", 
            path: "/restapis/{restApiId}/stages/{stageName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about a Stage resource.
    ///
    /// Parameters:
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name of the Stage resource to get information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getStage(
        restApiId: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Stage {
        let input = GetStageRequest(
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.getStage(input, logger: logger)
    }

    /// Gets information about one or more Stage resources.
    @Sendable
    @inlinable
    public func getStages(_ input: GetStagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Stages {
        try await self.client.execute(
            operation: "GetStages", 
            path: "/restapis/{restApiId}/stages", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about one or more Stage resources.
    ///
    /// Parameters:
    ///   - deploymentId: The stages' deployment identifiers.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func getStages(
        deploymentId: String? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Stages {
        let input = GetStagesRequest(
            deploymentId: deploymentId, 
            restApiId: restApiId
        )
        return try await self.getStages(input, logger: logger)
    }

    /// Gets the Tags collection for a given resource.
    @Sendable
    @inlinable
    public func getTags(_ input: GetTagsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Tags {
        try await self.client.execute(
            operation: "GetTags", 
            path: "/tags/{resourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the Tags collection for a given resource.
    ///
    /// Parameters:
    ///   - limit: (Not currently supported) The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: (Not currently supported) The current pagination position in the paged result set.
    ///   - resourceArn: The ARN of a resource that can be tagged.
    ///   - logger: Logger use during operation
    @inlinable
    public func getTags(
        limit: Int? = nil,
        position: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Tags {
        let input = GetTagsRequest(
            limit: limit, 
            position: position, 
            resourceArn: resourceArn
        )
        return try await self.getTags(input, logger: logger)
    }

    /// Gets the usage data of a usage plan in a specified time interval.
    @Sendable
    @inlinable
    public func getUsage(_ input: GetUsageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Usage {
        try await self.client.execute(
            operation: "GetUsage", 
            path: "/usageplans/{usagePlanId}/usage", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the usage data of a usage plan in a specified time interval.
    ///
    /// Parameters:
    ///   - endDate: The ending date (e.g., 2016-12-31) of the usage data.
    ///   - keyId: The Id of the API key associated with the resultant usage data.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - startDate: The starting date (e.g., 2016-01-01) of the usage data.
    ///   - usagePlanId: The Id of the usage plan associated with the usage data.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUsage(
        endDate: String,
        keyId: String? = nil,
        limit: Int? = nil,
        position: String? = nil,
        startDate: String,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Usage {
        let input = GetUsageRequest(
            endDate: endDate, 
            keyId: keyId, 
            limit: limit, 
            position: position, 
            startDate: startDate, 
            usagePlanId: usagePlanId
        )
        return try await self.getUsage(input, logger: logger)
    }

    /// Gets a usage plan of a given plan identifier.
    @Sendable
    @inlinable
    public func getUsagePlan(_ input: GetUsagePlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlan {
        try await self.client.execute(
            operation: "GetUsagePlan", 
            path: "/usageplans/{usagePlanId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a usage plan of a given plan identifier.
    ///
    /// Parameters:
    ///   - usagePlanId: The identifier of the UsagePlan resource to be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUsagePlan(
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlan {
        let input = GetUsagePlanRequest(
            usagePlanId: usagePlanId
        )
        return try await self.getUsagePlan(input, logger: logger)
    }

    /// Gets a usage plan key of a given key identifier.
    @Sendable
    @inlinable
    public func getUsagePlanKey(_ input: GetUsagePlanKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlanKey {
        try await self.client.execute(
            operation: "GetUsagePlanKey", 
            path: "/usageplans/{usagePlanId}/keys/{keyId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a usage plan key of a given key identifier.
    ///
    /// Parameters:
    ///   - keyId: The key Id of the to-be-retrieved UsagePlanKey resource representing a plan customer.
    ///   - usagePlanId: The Id of the UsagePlan resource representing the usage plan containing the to-be-retrieved UsagePlanKey resource representing a plan customer.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUsagePlanKey(
        keyId: String,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlanKey {
        let input = GetUsagePlanKeyRequest(
            keyId: keyId, 
            usagePlanId: usagePlanId
        )
        return try await self.getUsagePlanKey(input, logger: logger)
    }

    /// Gets all the usage plan keys representing the API keys added to a specified usage plan.
    @Sendable
    @inlinable
    public func getUsagePlanKeys(_ input: GetUsagePlanKeysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlanKeys {
        try await self.client.execute(
            operation: "GetUsagePlanKeys", 
            path: "/usageplans/{usagePlanId}/keys", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all the usage plan keys representing the API keys added to a specified usage plan.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - nameQuery: A query parameter specifying the name of the to-be-returned usage plan keys.
    ///   - position: The current pagination position in the paged result set.
    ///   - usagePlanId: The Id of the UsagePlan resource representing the usage plan containing the to-be-retrieved UsagePlanKey resource representing a plan customer.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUsagePlanKeys(
        limit: Int? = nil,
        nameQuery: String? = nil,
        position: String? = nil,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlanKeys {
        let input = GetUsagePlanKeysRequest(
            limit: limit, 
            nameQuery: nameQuery, 
            position: position, 
            usagePlanId: usagePlanId
        )
        return try await self.getUsagePlanKeys(input, logger: logger)
    }

    /// Gets all the usage plans of the caller's account.
    @Sendable
    @inlinable
    public func getUsagePlans(_ input: GetUsagePlansRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlans {
        try await self.client.execute(
            operation: "GetUsagePlans", 
            path: "/usageplans", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets all the usage plans of the caller's account.
    ///
    /// Parameters:
    ///   - keyId: The identifier of the API key associated with the usage plans.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUsagePlans(
        keyId: String? = nil,
        limit: Int? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlans {
        let input = GetUsagePlansRequest(
            keyId: keyId, 
            limit: limit, 
            position: position
        )
        return try await self.getUsagePlans(input, logger: logger)
    }

    /// Gets a specified VPC link under the caller's account in a region.
    @Sendable
    @inlinable
    public func getVpcLink(_ input: GetVpcLinkRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> VpcLink {
        try await self.client.execute(
            operation: "GetVpcLink", 
            path: "/vpclinks/{vpcLinkId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a specified VPC link under the caller's account in a region.
    ///
    /// Parameters:
    ///   - vpcLinkId: The identifier of the  VpcLink. It is used in an Integration to reference this VpcLink.
    ///   - logger: Logger use during operation
    @inlinable
    public func getVpcLink(
        vpcLinkId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> VpcLink {
        let input = GetVpcLinkRequest(
            vpcLinkId: vpcLinkId
        )
        return try await self.getVpcLink(input, logger: logger)
    }

    /// Gets the VpcLinks collection under the caller's account in a selected region.
    @Sendable
    @inlinable
    public func getVpcLinks(_ input: GetVpcLinksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> VpcLinks {
        try await self.client.execute(
            operation: "GetVpcLinks", 
            path: "/vpclinks", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the VpcLinks collection under the caller's account in a selected region.
    ///
    /// Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - position: The current pagination position in the paged result set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getVpcLinks(
        limit: Int? = nil,
        position: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> VpcLinks {
        let input = GetVpcLinksRequest(
            limit: limit, 
            position: position
        )
        return try await self.getVpcLinks(input, logger: logger)
    }

    /// Import API keys from an external source, such as a CSV-formatted file.
    @Sendable
    @inlinable
    public func importApiKeys(_ input: ImportApiKeysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ApiKeyIds {
        try await self.client.execute(
            operation: "ImportApiKeys", 
            path: "/apikeys?mode=import", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Import API keys from an external source, such as a CSV-formatted file.
    ///
    /// Parameters:
    ///   - body: The payload of the POST request to import API keys. For the payload format, see API Key File Format.
    ///   - failOnWarnings: A query parameter to indicate whether to rollback ApiKey importation (true) or not (false) when error is encountered.
    ///   - format: A query parameter to specify the input format to imported API keys. Currently, only the csv format is supported.
    ///   - logger: Logger use during operation
    @inlinable
    public func importApiKeys(
        body: AWSHTTPBody,
        failOnWarnings: Bool? = nil,
        format: ApiKeysFormat,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ApiKeyIds {
        let input = ImportApiKeysRequest(
            body: body, 
            failOnWarnings: failOnWarnings, 
            format: format
        )
        return try await self.importApiKeys(input, logger: logger)
    }

    /// Imports documentation parts
    @Sendable
    @inlinable
    public func importDocumentationParts(_ input: ImportDocumentationPartsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationPartIds {
        try await self.client.execute(
            operation: "ImportDocumentationParts", 
            path: "/restapis/{restApiId}/documentation/parts", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Imports documentation parts
    ///
    /// Parameters:
    ///   - body: Raw byte array representing the to-be-imported documentation parts. To import from an OpenAPI file, this is a JSON object.
    ///   - failOnWarnings: A query parameter to specify whether to rollback the documentation importation (true) or not (false) when a warning is encountered. The default value is false.
    ///   - mode: A query parameter to indicate whether to overwrite (overwrite) any existing DocumentationParts definition or to merge (merge) the new definition into the existing one. The default value is merge.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func importDocumentationParts(
        body: AWSHTTPBody,
        failOnWarnings: Bool? = nil,
        mode: PutMode? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationPartIds {
        let input = ImportDocumentationPartsRequest(
            body: body, 
            failOnWarnings: failOnWarnings, 
            mode: mode, 
            restApiId: restApiId
        )
        return try await self.importDocumentationParts(input, logger: logger)
    }

    /// A feature of the API Gateway control service for creating a new API from an external API definition file.
    @Sendable
    @inlinable
    public func importRestApi(_ input: ImportRestApiRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestApi {
        try await self.client.execute(
            operation: "ImportRestApi", 
            path: "/restapis?mode=import", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A feature of the API Gateway control service for creating a new API from an external API definition file.
    ///
    /// Parameters:
    ///   - body: The POST request body containing external API definitions. Currently, only OpenAPI definition JSON/YAML files are supported. The maximum size of the API definition file is 6MB.
    ///   - failOnWarnings: A query parameter to indicate whether to rollback the API creation (true) or not (false) when a warning is encountered. The default value is false.
    ///   - parameters: A key-value map of context-specific query string parameters specifying the behavior of different API importing operations. The following shows operation-specific parameters and their supported values. To exclude DocumentationParts from the import, set parameters as ignore=documentation. To configure the endpoint type, set parameters as endpointConfigurationTypes=EDGE, endpointConfigurationTypes=REGIONAL, or endpointConfigurationTypes=PRIVATE. The default endpoint type is EDGE. To handle imported basepath, set parameters as basepath=ignore, basepath=prepend or basepath=split.
    ///   - logger: Logger use during operation
    @inlinable
    public func importRestApi(
        body: AWSHTTPBody,
        failOnWarnings: Bool? = nil,
        parameters: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestApi {
        let input = ImportRestApiRequest(
            body: body, 
            failOnWarnings: failOnWarnings, 
            parameters: parameters
        )
        return try await self.importRestApi(input, logger: logger)
    }

    /// Creates a customization of a GatewayResponse of a specified response type and status code on the given RestApi.
    @Sendable
    @inlinable
    public func putGatewayResponse(_ input: PutGatewayResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GatewayResponse {
        try await self.client.execute(
            operation: "PutGatewayResponse", 
            path: "/restapis/{restApiId}/gatewayresponses/{responseType}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a customization of a GatewayResponse of a specified response type and status code on the given RestApi.
    ///
    /// Parameters:
    ///   - responseParameters: Response parameters (paths, query strings and headers) of the GatewayResponse as a string-to-string map of key-value  pairs.
    ///   - responseTemplates: Response templates of the GatewayResponse as a string-to-string map of key-value pairs.
    ///   - responseType: The response type of the associated GatewayResponse
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: The HTTP status code of the GatewayResponse.
    ///   - logger: Logger use during operation
    @inlinable
    public func putGatewayResponse(
        responseParameters: [String: String]? = nil,
        responseTemplates: [String: String]? = nil,
        responseType: GatewayResponseType,
        restApiId: String,
        statusCode: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GatewayResponse {
        let input = PutGatewayResponseRequest(
            responseParameters: responseParameters, 
            responseTemplates: responseTemplates, 
            responseType: responseType, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.putGatewayResponse(input, logger: logger)
    }

    /// Sets up a method's integration.
    @Sendable
    @inlinable
    public func putIntegration(_ input: PutIntegrationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Integration {
        try await self.client.execute(
            operation: "PutIntegration", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets up a method's integration.
    ///
    /// Parameters:
    ///   - cacheKeyParameters: A list of request parameters whose values API Gateway caches. To be valid values for cacheKeyParameters, these parameters must also be specified for Method requestParameters.
    ///   - cacheNamespace: Specifies a group of related cached parameters. By default, API Gateway uses the resource ID as the cacheNamespace. You can specify the same cacheNamespace across resources to return the same cached data for requests to different resources.
    ///   - connectionId: The ID of the VpcLink used for the integration. Specify this value only if you specify VPC_LINK as the connection type.
    ///   - connectionType: The type of the network connection to the integration endpoint. The valid value is INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and a network load balancer in a VPC. The default value is INTERNET.
    ///   - contentHandling: Specifies how to handle request payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors: If this property is not defined, the request payload will be passed through from the method request to integration request without modification, provided that the passthroughBehavior is configured to support payload pass-through.
    ///   - credentials: Specifies whether credentials are required for a put integration.
    ///   - httpMethod: Specifies the HTTP method for the integration.
    ///   - integrationHttpMethod: The HTTP method for the integration.
    ///   - passthroughBehavior: Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values:  WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER.
    ///   - requestParameters: A key-value map specifying request parameters that are passed from the method request to the back end. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the back end. The method request parameter value must match the pattern of  method.request.{location}.{name}, where location is querystring, path, or header and name must be a valid and unique method request parameter name.
    ///   - requestTemplates: Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value.
    ///   - resourceId: Specifies a put integration request's resource ID.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - timeoutInMillis: Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000 milliseconds or 29 seconds.  You can increase the default value to longer than 29 seconds for Regional or private APIs only.
    ///   - tlsConfig: 
    ///   - type: Specifies a put integration input's type.
    ///   - uri: Specifies Uniform Resource Identifier (URI) of the integration endpoint. For HTTP or HTTP_PROXY integrations, the URI must be a fully formed, encoded HTTP(S) URL according to the RFC-3986 specification, for either standard integration, where connectionType is not VPC_LINK, or private integration, where connectionType is VPC_LINK. For a private HTTP integration, the URI is not used for routing. For AWS or AWS_PROXY integrations, the URI is of the form arn:aws:apigateway:{region}:{subdomain.service|service}:path|action/{service_api}. Here, {Region} is the API Gateway region (e.g., us-east-1); {service} is the name of the integrated Amazon Web Services service (e.g., s3); and {subdomain} is a designated subdomain supported by certain Amazon Web Services service for fast host-name lookup. action can be used for an Amazon Web Services service action-based API, using an Action={name}&{p1}={v1}&p2={v2}... query string. The ensuing {service_api} refers to a supported action {name} plus any required input parameters. Alternatively, path can be used for an Amazon Web Services service path-based API. The ensuing service_api refers to the path to an Amazon Web Services service resource, including the region of the integrated Amazon Web Services service, if applicable. For example, for integration with the S3 API of GetObject, the uri can be either arn:aws:apigateway:us-west-2:s3:action/GetObject&Bucket={bucket}&Key={key} or arn:aws:apigateway:us-west-2:s3:path/{bucket}/{key}.
    ///   - logger: Logger use during operation
    @inlinable
    public func putIntegration(
        cacheKeyParameters: [String]? = nil,
        cacheNamespace: String? = nil,
        connectionId: String? = nil,
        connectionType: ConnectionType? = nil,
        contentHandling: ContentHandlingStrategy? = nil,
        credentials: String? = nil,
        httpMethod: String,
        integrationHttpMethod: String? = nil,
        passthroughBehavior: String? = nil,
        requestParameters: [String: String]? = nil,
        requestTemplates: [String: String]? = nil,
        resourceId: String,
        restApiId: String,
        timeoutInMillis: Int? = nil,
        tlsConfig: TlsConfig? = nil,
        type: IntegrationType,
        uri: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Integration {
        let input = PutIntegrationRequest(
            cacheKeyParameters: cacheKeyParameters, 
            cacheNamespace: cacheNamespace, 
            connectionId: connectionId, 
            connectionType: connectionType, 
            contentHandling: contentHandling, 
            credentials: credentials, 
            httpMethod: httpMethod, 
            integrationHttpMethod: integrationHttpMethod, 
            passthroughBehavior: passthroughBehavior, 
            requestParameters: requestParameters, 
            requestTemplates: requestTemplates, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            timeoutInMillis: timeoutInMillis, 
            tlsConfig: tlsConfig, 
            type: type, 
            uri: uri
        )
        return try await self.putIntegration(input, logger: logger)
    }

    /// Represents a put integration.
    @Sendable
    @inlinable
    public func putIntegrationResponse(_ input: PutIntegrationResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> IntegrationResponse {
        try await self.client.execute(
            operation: "PutIntegrationResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration/responses/{statusCode}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents a put integration.
    ///
    /// Parameters:
    ///   - contentHandling: Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors: If this property is not defined, the response payload will be passed through from the integration response to the method response without modification.
    ///   - httpMethod: Specifies a put integration response request's HTTP method.
    ///   - resourceId: Specifies a put integration response request's resource identifier.
    ///   - responseParameters: A key-value map specifying response parameters that are passed to the method response from the back end. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name must be a valid and unique response header name and JSON-expression a valid JSON expression without the $ prefix.
    ///   - responseTemplates: Specifies a put integration response's templates.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - selectionPattern: Specifies the selection pattern of a put integration response.
    ///   - statusCode: Specifies the status code that is used to map the integration response to an existing MethodResponse.
    ///   - logger: Logger use during operation
    @inlinable
    public func putIntegrationResponse(
        contentHandling: ContentHandlingStrategy? = nil,
        httpMethod: String,
        resourceId: String,
        responseParameters: [String: String]? = nil,
        responseTemplates: [String: String]? = nil,
        restApiId: String,
        selectionPattern: String? = nil,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> IntegrationResponse {
        let input = PutIntegrationResponseRequest(
            contentHandling: contentHandling, 
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            responseParameters: responseParameters, 
            responseTemplates: responseTemplates, 
            restApiId: restApiId, 
            selectionPattern: selectionPattern, 
            statusCode: statusCode
        )
        return try await self.putIntegrationResponse(input, logger: logger)
    }

    /// Add a method to an existing Resource resource.
    @Sendable
    @inlinable
    public func putMethod(_ input: PutMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Method {
        try await self.client.execute(
            operation: "PutMethod", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Add a method to an existing Resource resource.
    ///
    /// Parameters:
    ///   - apiKeyRequired: Specifies whether the method required a valid ApiKey.
    ///   - authorizationScopes: A list of authorization scopes configured on the method. The scopes are used with a COGNITO_USER_POOLS authorizer to authorize the method invocation. The authorization works by matching the method scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any method scopes matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the method scope is configured, the client must provide an access token instead of an identity token for authorization purposes.
    ///   - authorizationType: The method's authorization type. Valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, CUSTOM for using a custom authorizer, or COGNITO_USER_POOLS for using a Cognito user pool.
    ///   - authorizerId: Specifies the identifier of an Authorizer to use on this Method, if the type is CUSTOM or COGNITO_USER_POOLS. The authorizer identifier is generated by API Gateway when you created the authorizer.
    ///   - httpMethod: Specifies the method request's HTTP method type.
    ///   - operationName: A human-friendly operation identifier for the method. For example, you can assign the operationName of ListPets for the GET /pets method in the PetStore example.
    ///   - requestModels: Specifies the Model resources used for the request's content type. Request models are represented as a key/value map, with a content type as the key and a Model name as the value.
    ///   - requestParameters: A key-value map defining required or optional method request parameters that can be accepted by API Gateway. A key defines a method request parameter name matching the pattern of  method.request.{location}.{name}, where location is querystring, path, or header and name is a valid and unique parameter name. The value associated with the key is a Boolean flag indicating whether the parameter is required (true) or optional (false).  The method request parameter names defined here are available in Integration to be mapped to integration request parameters or body-mapping templates.
    ///   - requestValidatorId: The identifier of a RequestValidator for validating the method request.
    ///   - resourceId: The Resource identifier for the new Method resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func putMethod(
        apiKeyRequired: Bool? = nil,
        authorizationScopes: [String]? = nil,
        authorizationType: String,
        authorizerId: String? = nil,
        httpMethod: String,
        operationName: String? = nil,
        requestModels: [String: String]? = nil,
        requestParameters: [String: Bool]? = nil,
        requestValidatorId: String? = nil,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Method {
        let input = PutMethodRequest(
            apiKeyRequired: apiKeyRequired, 
            authorizationScopes: authorizationScopes, 
            authorizationType: authorizationType, 
            authorizerId: authorizerId, 
            httpMethod: httpMethod, 
            operationName: operationName, 
            requestModels: requestModels, 
            requestParameters: requestParameters, 
            requestValidatorId: requestValidatorId, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.putMethod(input, logger: logger)
    }

    /// Adds a MethodResponse to an existing Method resource.
    @Sendable
    @inlinable
    public func putMethodResponse(_ input: PutMethodResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> MethodResponse {
        try await self.client.execute(
            operation: "PutMethodResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/responses/{statusCode}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a MethodResponse to an existing Method resource.
    ///
    /// Parameters:
    ///   - httpMethod: The HTTP verb of the Method resource.
    ///   - resourceId: The Resource identifier for the Method resource.
    ///   - responseModels: Specifies the Model resources used for the response's content type. Response models are represented as a key/value map, with a content type as the key and a Model name as the value.
    ///   - responseParameters: A key-value map specifying required or optional response parameters that API Gateway can send back to the caller. A key defines a method response header name and the associated value is a Boolean flag indicating whether the method response parameter is required or not. The method response header names must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The response parameter names defined here are available in the integration response to be mapped from an integration response header expressed in integration.response.header.{name}, a static value enclosed within a pair of single quotes (e.g., 'application/json'), or a JSON expression from the back-end response payload in the form of integration.response.body.{JSON-expression}, where JSON-expression is a valid JSON expression without the $ prefix.)
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: The method response's status code.
    ///   - logger: Logger use during operation
    @inlinable
    public func putMethodResponse(
        httpMethod: String,
        resourceId: String,
        responseModels: [String: String]? = nil,
        responseParameters: [String: Bool]? = nil,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> MethodResponse {
        let input = PutMethodResponseRequest(
            httpMethod: httpMethod, 
            resourceId: resourceId, 
            responseModels: responseModels, 
            responseParameters: responseParameters, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.putMethodResponse(input, logger: logger)
    }

    /// A feature of the API Gateway control service for updating an existing API with an input of external API definitions. The update can take the form of merging the supplied definition into the existing API or overwriting the existing API.
    @Sendable
    @inlinable
    public func putRestApi(_ input: PutRestApiRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestApi {
        try await self.client.execute(
            operation: "PutRestApi", 
            path: "/restapis/{restApiId}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A feature of the API Gateway control service for updating an existing API with an input of external API definitions. The update can take the form of merging the supplied definition into the existing API or overwriting the existing API.
    ///
    /// Parameters:
    ///   - body: The PUT request body containing external API definitions. Currently, only OpenAPI definition JSON/YAML files are supported. The maximum size of the API definition file is 6MB.
    ///   - failOnWarnings: A query parameter to indicate whether to rollback the API update (true) or not (false) when a warning is encountered. The default value is false.
    ///   - mode: The mode query parameter to specify the update mode. Valid values are "merge" and "overwrite". By default, the update mode is "merge".
    ///   - parameters: Custom header parameters as part of the request. For example, to exclude DocumentationParts from an imported API, set ignore=documentation as a parameters value, as in the AWS CLI command of aws apigateway import-rest-api --parameters ignore=documentation --body 'file:///path/to/imported-api-body.json'.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func putRestApi(
        body: AWSHTTPBody,
        failOnWarnings: Bool? = nil,
        mode: PutMode? = nil,
        parameters: [String: String]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestApi {
        let input = PutRestApiRequest(
            body: body, 
            failOnWarnings: failOnWarnings, 
            mode: mode, 
            parameters: parameters, 
            restApiId: restApiId
        )
        return try await self.putRestApi(input, logger: logger)
    }

    /// Rejects a domain name access association with a private custom domain name. To reject a domain name access association with an access association source in another AWS account, use this operation. To remove a domain name access association with an access association source in your own account, use the DeleteDomainNameAccessAssociation operation.
    @Sendable
    @inlinable
    public func rejectDomainNameAccessAssociation(_ input: RejectDomainNameAccessAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RejectDomainNameAccessAssociation", 
            path: "/rejectdomainnameaccessassociations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Rejects a domain name access association with a private custom domain name. To reject a domain name access association with an access association source in another AWS account, use this operation. To remove a domain name access association with an access association source in your own account, use the DeleteDomainNameAccessAssociation operation.
    ///
    /// Parameters:
    ///   - domainNameAccessAssociationArn: The ARN of the domain name access association resource.
    ///   - domainNameArn: The ARN of the domain name.
    ///   - logger: Logger use during operation
    @inlinable
    public func rejectDomainNameAccessAssociation(
        domainNameAccessAssociationArn: String,
        domainNameArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RejectDomainNameAccessAssociationRequest(
            domainNameAccessAssociationArn: domainNameAccessAssociationArn, 
            domainNameArn: domainNameArn
        )
        return try await self.rejectDomainNameAccessAssociation(input, logger: logger)
    }

    /// Adds or updates a tag on a given resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds or updates a tag on a given resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of a resource that can be tagged.
    ///   - tags: The key-value map of strings. The valid character set is [a-zA-Z+-=._:/]. The tag key can be up to 128 characters and must not start with aws:. The tag value can be up to 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Simulate the execution of an Authorizer in your RestApi with headers, parameters, and an incoming request body.
    @Sendable
    @inlinable
    public func testInvokeAuthorizer(_ input: TestInvokeAuthorizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TestInvokeAuthorizerResponse {
        try await self.client.execute(
            operation: "TestInvokeAuthorizer", 
            path: "/restapis/{restApiId}/authorizers/{authorizerId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Simulate the execution of an Authorizer in your RestApi with headers, parameters, and an incoming request body.
    ///
    /// Parameters:
    ///   - additionalContext: A key-value map of additional context variables.
    ///   - authorizerId: Specifies a test invoke authorizer request's Authorizer ID.
    ///   - body: The simulated request body of an incoming invocation request.
    ///   - headers: A key-value map of headers to simulate an incoming invocation request. This is where the incoming authorization token, or identity source, should be specified.
    ///   - multiValueHeaders: The headers as a map from string to list of values to simulate an incoming invocation request. This is where the incoming authorization token, or identity source, may be specified.
    ///   - pathWithQueryString: The URI path, including query string, of the simulated invocation request. Use this to specify path parameters and query string parameters.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageVariables: A key-value map of stage variables to simulate an invocation on a deployed Stage.
    ///   - logger: Logger use during operation
    @inlinable
    public func testInvokeAuthorizer(
        additionalContext: [String: String]? = nil,
        authorizerId: String,
        body: String? = nil,
        headers: [String: String]? = nil,
        multiValueHeaders: [String: [String]]? = nil,
        pathWithQueryString: String? = nil,
        restApiId: String,
        stageVariables: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TestInvokeAuthorizerResponse {
        let input = TestInvokeAuthorizerRequest(
            additionalContext: additionalContext, 
            authorizerId: authorizerId, 
            body: body, 
            headers: headers, 
            multiValueHeaders: multiValueHeaders, 
            pathWithQueryString: pathWithQueryString, 
            restApiId: restApiId, 
            stageVariables: stageVariables
        )
        return try await self.testInvokeAuthorizer(input, logger: logger)
    }

    /// Simulate the invocation of a Method in your RestApi with headers, parameters, and an incoming request body.
    @Sendable
    @inlinable
    public func testInvokeMethod(_ input: TestInvokeMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TestInvokeMethodResponse {
        try await self.client.execute(
            operation: "TestInvokeMethod", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Simulate the invocation of a Method in your RestApi with headers, parameters, and an incoming request body.
    ///
    /// Parameters:
    ///   - body: The simulated request body of an incoming invocation request.
    ///   - clientCertificateId: A ClientCertificate identifier to use in the test invocation. API Gateway will use the certificate when making the HTTPS request to the defined back-end endpoint.
    ///   - headers: A key-value map of headers to simulate an incoming invocation request.
    ///   - httpMethod: Specifies a test invoke method request's HTTP method.
    ///   - multiValueHeaders: The headers as a map from string to list of values to simulate an incoming invocation request.
    ///   - pathWithQueryString: The URI path, including query string, of the simulated invocation request. Use this to specify path parameters and query string parameters.
    ///   - resourceId: Specifies a test invoke method request's resource ID.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageVariables: A key-value map of stage variables to simulate an invocation on a deployed Stage.
    ///   - logger: Logger use during operation
    @inlinable
    public func testInvokeMethod(
        body: String? = nil,
        clientCertificateId: String? = nil,
        headers: [String: String]? = nil,
        httpMethod: String,
        multiValueHeaders: [String: [String]]? = nil,
        pathWithQueryString: String? = nil,
        resourceId: String,
        restApiId: String,
        stageVariables: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TestInvokeMethodResponse {
        let input = TestInvokeMethodRequest(
            body: body, 
            clientCertificateId: clientCertificateId, 
            headers: headers, 
            httpMethod: httpMethod, 
            multiValueHeaders: multiValueHeaders, 
            pathWithQueryString: pathWithQueryString, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            stageVariables: stageVariables
        )
        return try await self.testInvokeMethod(input, logger: logger)
    }

    /// Removes a tag from a given resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags/{resourceArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a tag from a given resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of a resource that can be tagged.
    ///   - tagKeys: The Tag keys to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Changes information about the current Account resource.
    @Sendable
    @inlinable
    public func updateAccount(_ input: UpdateAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Account {
        try await self.client.execute(
            operation: "UpdateAccount", 
            path: "/account", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about the current Account resource.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAccount(
        patchOperations: [PatchOperation]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Account {
        let input = UpdateAccountRequest(
            patchOperations: patchOperations
        )
        return try await self.updateAccount(input, logger: logger)
    }

    /// Changes information about an ApiKey resource.
    @Sendable
    @inlinable
    public func updateApiKey(_ input: UpdateApiKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ApiKey {
        try await self.client.execute(
            operation: "UpdateApiKey", 
            path: "/apikeys/{apiKey}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about an ApiKey resource.
    ///
    /// Parameters:
    ///   - apiKey: The identifier of the ApiKey resource to be updated.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateApiKey(
        apiKey: String,
        patchOperations: [PatchOperation]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ApiKey {
        let input = UpdateApiKeyRequest(
            apiKey: apiKey, 
            patchOperations: patchOperations
        )
        return try await self.updateApiKey(input, logger: logger)
    }

    /// Updates an existing Authorizer resource.
    @Sendable
    @inlinable
    public func updateAuthorizer(_ input: UpdateAuthorizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Authorizer {
        try await self.client.execute(
            operation: "UpdateAuthorizer", 
            path: "/restapis/{restApiId}/authorizers/{authorizerId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Authorizer resource.
    ///
    /// Parameters:
    ///   - authorizerId: The identifier of the Authorizer resource.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAuthorizer(
        authorizerId: String,
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Authorizer {
        let input = UpdateAuthorizerRequest(
            authorizerId: authorizerId, 
            patchOperations: patchOperations, 
            restApiId: restApiId
        )
        return try await self.updateAuthorizer(input, logger: logger)
    }

    /// Changes information about the BasePathMapping resource.
    @Sendable
    @inlinable
    public func updateBasePathMapping(_ input: UpdateBasePathMappingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BasePathMapping {
        try await self.client.execute(
            operation: "UpdateBasePathMapping", 
            path: "/domainnames/{domainName}/basepathmappings/{basePath}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about the BasePathMapping resource.
    ///
    /// Parameters:
    ///   - basePath: The base path of the BasePathMapping resource to change. To specify an empty base path, set this parameter to '(none)'.
    ///   - domainName: The domain name of the BasePathMapping resource to change.
    ///   - domainNameId:  The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateBasePathMapping(
        basePath: String,
        domainName: String,
        domainNameId: String? = nil,
        patchOperations: [PatchOperation]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BasePathMapping {
        let input = UpdateBasePathMappingRequest(
            basePath: basePath, 
            domainName: domainName, 
            domainNameId: domainNameId, 
            patchOperations: patchOperations
        )
        return try await self.updateBasePathMapping(input, logger: logger)
    }

    /// Changes information about an ClientCertificate resource.
    @Sendable
    @inlinable
    public func updateClientCertificate(_ input: UpdateClientCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ClientCertificate {
        try await self.client.execute(
            operation: "UpdateClientCertificate", 
            path: "/clientcertificates/{clientCertificateId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about an ClientCertificate resource.
    ///
    /// Parameters:
    ///   - clientCertificateId: The identifier of the ClientCertificate resource to be updated.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateClientCertificate(
        clientCertificateId: String,
        patchOperations: [PatchOperation]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ClientCertificate {
        let input = UpdateClientCertificateRequest(
            clientCertificateId: clientCertificateId, 
            patchOperations: patchOperations
        )
        return try await self.updateClientCertificate(input, logger: logger)
    }

    /// Changes information about a Deployment resource.
    @Sendable
    @inlinable
    public func updateDeployment(_ input: UpdateDeploymentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Deployment {
        try await self.client.execute(
            operation: "UpdateDeployment", 
            path: "/restapis/{restApiId}/deployments/{deploymentId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about a Deployment resource.
    ///
    /// Parameters:
    ///   - deploymentId: The replacement identifier for the Deployment resource to change information about.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDeployment(
        deploymentId: String,
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Deployment {
        let input = UpdateDeploymentRequest(
            deploymentId: deploymentId, 
            patchOperations: patchOperations, 
            restApiId: restApiId
        )
        return try await self.updateDeployment(input, logger: logger)
    }

    /// Updates a documentation part.
    @Sendable
    @inlinable
    public func updateDocumentationPart(_ input: UpdateDocumentationPartRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationPart {
        try await self.client.execute(
            operation: "UpdateDocumentationPart", 
            path: "/restapis/{restApiId}/documentation/parts/{documentationPartId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a documentation part.
    ///
    /// Parameters:
    ///   - documentationPartId: The identifier of the to-be-updated documentation part.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocumentationPart(
        documentationPartId: String,
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationPart {
        let input = UpdateDocumentationPartRequest(
            documentationPartId: documentationPartId, 
            patchOperations: patchOperations, 
            restApiId: restApiId
        )
        return try await self.updateDocumentationPart(input, logger: logger)
    }

    /// Updates a documentation version.
    @Sendable
    @inlinable
    public func updateDocumentationVersion(_ input: UpdateDocumentationVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DocumentationVersion {
        try await self.client.execute(
            operation: "UpdateDocumentationVersion", 
            path: "/restapis/{restApiId}/documentation/versions/{documentationVersion}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a documentation version.
    ///
    /// Parameters:
    ///   - documentationVersion: The version identifier of the to-be-updated documentation version.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocumentationVersion(
        documentationVersion: String,
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DocumentationVersion {
        let input = UpdateDocumentationVersionRequest(
            documentationVersion: documentationVersion, 
            patchOperations: patchOperations, 
            restApiId: restApiId
        )
        return try await self.updateDocumentationVersion(input, logger: logger)
    }

    /// Changes information about the DomainName resource.
    @Sendable
    @inlinable
    public func updateDomainName(_ input: UpdateDomainNameRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DomainName {
        try await self.client.execute(
            operation: "UpdateDomainName", 
            path: "/domainnames/{domainName}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about the DomainName resource.
    ///
    /// Parameters:
    ///   - domainName: The name of the DomainName resource to be changed.
    ///   - domainNameId:  The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDomainName(
        domainName: String,
        domainNameId: String? = nil,
        patchOperations: [PatchOperation]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DomainName {
        let input = UpdateDomainNameRequest(
            domainName: domainName, 
            domainNameId: domainNameId, 
            patchOperations: patchOperations
        )
        return try await self.updateDomainName(input, logger: logger)
    }

    /// Updates a GatewayResponse of a specified response type on the given RestApi.
    @Sendable
    @inlinable
    public func updateGatewayResponse(_ input: UpdateGatewayResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GatewayResponse {
        try await self.client.execute(
            operation: "UpdateGatewayResponse", 
            path: "/restapis/{restApiId}/gatewayresponses/{responseType}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a GatewayResponse of a specified response type on the given RestApi.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - responseType: The response type of the associated GatewayResponse.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateGatewayResponse(
        patchOperations: [PatchOperation]? = nil,
        responseType: GatewayResponseType,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GatewayResponse {
        let input = UpdateGatewayResponseRequest(
            patchOperations: patchOperations, 
            responseType: responseType, 
            restApiId: restApiId
        )
        return try await self.updateGatewayResponse(input, logger: logger)
    }

    /// Represents an update integration.
    @Sendable
    @inlinable
    public func updateIntegration(_ input: UpdateIntegrationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Integration {
        try await self.client.execute(
            operation: "UpdateIntegration", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents an update integration.
    ///
    /// Parameters:
    ///   - httpMethod: Represents an update integration request's HTTP method.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - resourceId: Represents an update integration request's resource identifier.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateIntegration(
        httpMethod: String,
        patchOperations: [PatchOperation]? = nil,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Integration {
        let input = UpdateIntegrationRequest(
            httpMethod: httpMethod, 
            patchOperations: patchOperations, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.updateIntegration(input, logger: logger)
    }

    /// Represents an update integration response.
    @Sendable
    @inlinable
    public func updateIntegrationResponse(_ input: UpdateIntegrationResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> IntegrationResponse {
        try await self.client.execute(
            operation: "UpdateIntegrationResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/integration/responses/{statusCode}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Represents an update integration response.
    ///
    /// Parameters:
    ///   - httpMethod: Specifies an update integration response request's HTTP method.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - resourceId: Specifies an update integration response request's resource identifier.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: Specifies an update integration response request's status code.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateIntegrationResponse(
        httpMethod: String,
        patchOperations: [PatchOperation]? = nil,
        resourceId: String,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> IntegrationResponse {
        let input = UpdateIntegrationResponseRequest(
            httpMethod: httpMethod, 
            patchOperations: patchOperations, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.updateIntegrationResponse(input, logger: logger)
    }

    /// Updates an existing Method resource.
    @Sendable
    @inlinable
    public func updateMethod(_ input: UpdateMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Method {
        try await self.client.execute(
            operation: "UpdateMethod", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Method resource.
    ///
    /// Parameters:
    ///   - httpMethod: The HTTP verb of the Method resource.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - resourceId: The Resource identifier for the Method resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMethod(
        httpMethod: String,
        patchOperations: [PatchOperation]? = nil,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Method {
        let input = UpdateMethodRequest(
            httpMethod: httpMethod, 
            patchOperations: patchOperations, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.updateMethod(input, logger: logger)
    }

    /// Updates an existing MethodResponse resource.
    @Sendable
    @inlinable
    public func updateMethodResponse(_ input: UpdateMethodResponseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> MethodResponse {
        try await self.client.execute(
            operation: "UpdateMethodResponse", 
            path: "/restapis/{restApiId}/resources/{resourceId}/methods/{httpMethod}/responses/{statusCode}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing MethodResponse resource.
    ///
    /// Parameters:
    ///   - httpMethod: The HTTP verb of the Method resource.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - resourceId: The Resource identifier for the MethodResponse resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - statusCode: The status code for the MethodResponse resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMethodResponse(
        httpMethod: String,
        patchOperations: [PatchOperation]? = nil,
        resourceId: String,
        restApiId: String,
        statusCode: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> MethodResponse {
        let input = UpdateMethodResponseRequest(
            httpMethod: httpMethod, 
            patchOperations: patchOperations, 
            resourceId: resourceId, 
            restApiId: restApiId, 
            statusCode: statusCode
        )
        return try await self.updateMethodResponse(input, logger: logger)
    }

    /// Changes information about a model. The maximum size of the model is 400 KB.
    @Sendable
    @inlinable
    public func updateModel(_ input: UpdateModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Model {
        try await self.client.execute(
            operation: "UpdateModel", 
            path: "/restapis/{restApiId}/models/{modelName}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about a model. The maximum size of the model is 400 KB.
    ///
    /// Parameters:
    ///   - modelName: The name of the model to update.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateModel(
        modelName: String,
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Model {
        let input = UpdateModelRequest(
            modelName: modelName, 
            patchOperations: patchOperations, 
            restApiId: restApiId
        )
        return try await self.updateModel(input, logger: logger)
    }

    /// Updates a RequestValidator of a given RestApi.
    @Sendable
    @inlinable
    public func updateRequestValidator(_ input: UpdateRequestValidatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RequestValidator {
        try await self.client.execute(
            operation: "UpdateRequestValidator", 
            path: "/restapis/{restApiId}/requestvalidators/{requestValidatorId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a RequestValidator of a given RestApi.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - requestValidatorId: The identifier of RequestValidator to be updated.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRequestValidator(
        patchOperations: [PatchOperation]? = nil,
        requestValidatorId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RequestValidator {
        let input = UpdateRequestValidatorRequest(
            patchOperations: patchOperations, 
            requestValidatorId: requestValidatorId, 
            restApiId: restApiId
        )
        return try await self.updateRequestValidator(input, logger: logger)
    }

    /// Changes information about a Resource resource.
    @Sendable
    @inlinable
    public func updateResource(_ input: UpdateResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Resource {
        try await self.client.execute(
            operation: "UpdateResource", 
            path: "/restapis/{restApiId}/resources/{resourceId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about a Resource resource.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - resourceId: The identifier of the Resource resource.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateResource(
        patchOperations: [PatchOperation]? = nil,
        resourceId: String,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Resource {
        let input = UpdateResourceRequest(
            patchOperations: patchOperations, 
            resourceId: resourceId, 
            restApiId: restApiId
        )
        return try await self.updateResource(input, logger: logger)
    }

    /// Changes information about the specified API.
    @Sendable
    @inlinable
    public func updateRestApi(_ input: UpdateRestApiRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RestApi {
        try await self.client.execute(
            operation: "UpdateRestApi", 
            path: "/restapis/{restApiId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about the specified API.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRestApi(
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RestApi {
        let input = UpdateRestApiRequest(
            patchOperations: patchOperations, 
            restApiId: restApiId
        )
        return try await self.updateRestApi(input, logger: logger)
    }

    /// Changes information about a Stage resource.
    @Sendable
    @inlinable
    public func updateStage(_ input: UpdateStageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Stage {
        try await self.client.execute(
            operation: "UpdateStage", 
            path: "/restapis/{restApiId}/stages/{stageName}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes information about a Stage resource.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - stageName: The name of the Stage resource to change information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateStage(
        patchOperations: [PatchOperation]? = nil,
        restApiId: String,
        stageName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Stage {
        let input = UpdateStageRequest(
            patchOperations: patchOperations, 
            restApiId: restApiId, 
            stageName: stageName
        )
        return try await self.updateStage(input, logger: logger)
    }

    /// Grants a temporary extension to the remaining quota of a usage plan associated with a specified API key.
    @Sendable
    @inlinable
    public func updateUsage(_ input: UpdateUsageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> Usage {
        try await self.client.execute(
            operation: "UpdateUsage", 
            path: "/usageplans/{usagePlanId}/keys/{keyId}/usage", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants a temporary extension to the remaining quota of a usage plan associated with a specified API key.
    ///
    /// Parameters:
    ///   - keyId: The identifier of the API key associated with the usage plan in which a temporary extension is granted to the remaining quota.
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - usagePlanId: The Id of the usage plan associated with the usage data.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateUsage(
        keyId: String,
        patchOperations: [PatchOperation]? = nil,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> Usage {
        let input = UpdateUsageRequest(
            keyId: keyId, 
            patchOperations: patchOperations, 
            usagePlanId: usagePlanId
        )
        return try await self.updateUsage(input, logger: logger)
    }

    /// Updates a usage plan of a given plan Id.
    @Sendable
    @inlinable
    public func updateUsagePlan(_ input: UpdateUsagePlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UsagePlan {
        try await self.client.execute(
            operation: "UpdateUsagePlan", 
            path: "/usageplans/{usagePlanId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a usage plan of a given plan Id.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - usagePlanId: The Id of the to-be-updated usage plan.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateUsagePlan(
        patchOperations: [PatchOperation]? = nil,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UsagePlan {
        let input = UpdateUsagePlanRequest(
            patchOperations: patchOperations, 
            usagePlanId: usagePlanId
        )
        return try await self.updateUsagePlan(input, logger: logger)
    }

    /// Updates an existing VpcLink of a specified identifier.
    @Sendable
    @inlinable
    public func updateVpcLink(_ input: UpdateVpcLinkRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> VpcLink {
        try await self.client.execute(
            operation: "UpdateVpcLink", 
            path: "/vpclinks/{vpcLinkId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing VpcLink of a specified identifier.
    ///
    /// Parameters:
    ///   - patchOperations: For more information about supported patch operations, see Patch Operations.
    ///   - vpcLinkId: The identifier of the  VpcLink. It is used in an Integration to reference this VpcLink.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateVpcLink(
        patchOperations: [PatchOperation]? = nil,
        vpcLinkId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> VpcLink {
        let input = UpdateVpcLinkRequest(
            patchOperations: patchOperations, 
            vpcLinkId: vpcLinkId
        )
        return try await self.updateVpcLink(input, logger: logger)
    }
}

extension APIGateway {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: APIGateway, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension APIGateway {
    /// Return PaginatorSequence for operation ``getApiKeys(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getApiKeysPaginator(
        _ input: GetApiKeysRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetApiKeysRequest, ApiKeys> {
        return .init(
            input: input,
            command: self.getApiKeys,
            inputKey: \GetApiKeysRequest.position,
            outputKey: \ApiKeys.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getApiKeys(_:logger:)``.
    ///
    /// - Parameters:
    ///   - customerId: The identifier of a customer in Amazon Web Services Marketplace or an external system, such as a developer portal.
    ///   - includeValues: A boolean flag to specify whether (true) or not (false) the result contains key values.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - nameQuery: The name of queried API keys.
    ///   - logger: Logger used for logging
    @inlinable
    public func getApiKeysPaginator(
        customerId: String? = nil,
        includeValues: Bool? = nil,
        limit: Int? = nil,
        nameQuery: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetApiKeysRequest, ApiKeys> {
        let input = GetApiKeysRequest(
            customerId: customerId, 
            includeValues: includeValues, 
            limit: limit, 
            nameQuery: nameQuery
        )
        return self.getApiKeysPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getBasePathMappings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getBasePathMappingsPaginator(
        _ input: GetBasePathMappingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetBasePathMappingsRequest, BasePathMappings> {
        return .init(
            input: input,
            command: self.getBasePathMappings,
            inputKey: \GetBasePathMappingsRequest.position,
            outputKey: \BasePathMappings.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getBasePathMappings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domainName: The domain name of a BasePathMapping resource.
    ///   - domainNameId:  The identifier for the domain name resource. Supported only for private custom domain names.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func getBasePathMappingsPaginator(
        domainName: String,
        domainNameId: String? = nil,
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetBasePathMappingsRequest, BasePathMappings> {
        let input = GetBasePathMappingsRequest(
            domainName: domainName, 
            domainNameId: domainNameId, 
            limit: limit
        )
        return self.getBasePathMappingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getClientCertificates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getClientCertificatesPaginator(
        _ input: GetClientCertificatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetClientCertificatesRequest, ClientCertificates> {
        return .init(
            input: input,
            command: self.getClientCertificates,
            inputKey: \GetClientCertificatesRequest.position,
            outputKey: \ClientCertificates.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getClientCertificates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func getClientCertificatesPaginator(
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetClientCertificatesRequest, ClientCertificates> {
        let input = GetClientCertificatesRequest(
            limit: limit
        )
        return self.getClientCertificatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getDeployments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getDeploymentsPaginator(
        _ input: GetDeploymentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetDeploymentsRequest, Deployments> {
        return .init(
            input: input,
            command: self.getDeployments,
            inputKey: \GetDeploymentsRequest.position,
            outputKey: \Deployments.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getDeployments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger used for logging
    @inlinable
    public func getDeploymentsPaginator(
        limit: Int? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetDeploymentsRequest, Deployments> {
        let input = GetDeploymentsRequest(
            limit: limit, 
            restApiId: restApiId
        )
        return self.getDeploymentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getDomainNames(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getDomainNamesPaginator(
        _ input: GetDomainNamesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetDomainNamesRequest, DomainNames> {
        return .init(
            input: input,
            command: self.getDomainNames,
            inputKey: \GetDomainNamesRequest.position,
            outputKey: \DomainNames.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getDomainNames(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - resourceOwner: The owner of the domain name access association.
    ///   - logger: Logger used for logging
    @inlinable
    public func getDomainNamesPaginator(
        limit: Int? = nil,
        resourceOwner: ResourceOwner? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetDomainNamesRequest, DomainNames> {
        let input = GetDomainNamesRequest(
            limit: limit, 
            resourceOwner: resourceOwner
        )
        return self.getDomainNamesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getModelsPaginator(
        _ input: GetModelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetModelsRequest, Models> {
        return .init(
            input: input,
            command: self.getModels,
            inputKey: \GetModelsRequest.position,
            outputKey: \Models.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getModels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger used for logging
    @inlinable
    public func getModelsPaginator(
        limit: Int? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetModelsRequest, Models> {
        let input = GetModelsRequest(
            limit: limit, 
            restApiId: restApiId
        )
        return self.getModelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourcesPaginator(
        _ input: GetResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetResourcesRequest, Resources> {
        return .init(
            input: input,
            command: self.getResources,
            inputKey: \GetResourcesRequest.position,
            outputKey: \Resources.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - embed: A query parameter used to retrieve the specified resources embedded in the returned Resources resource in the response.  This embed parameter value is a list of comma-separated strings. Currently, the request supports only retrieval of the embedded Method resources this way. The query parameter value must be a single-valued list and contain the "methods" string. For example, GET /restapis/{restapi_id}/resources?embed=methods.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - restApiId: The string identifier of the associated RestApi.
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourcesPaginator(
        embed: [String]? = nil,
        limit: Int? = nil,
        restApiId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetResourcesRequest, Resources> {
        let input = GetResourcesRequest(
            embed: embed, 
            limit: limit, 
            restApiId: restApiId
        )
        return self.getResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getRestApis(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getRestApisPaginator(
        _ input: GetRestApisRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetRestApisRequest, RestApis> {
        return .init(
            input: input,
            command: self.getRestApis,
            inputKey: \GetRestApisRequest.position,
            outputKey: \RestApis.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getRestApis(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func getRestApisPaginator(
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetRestApisRequest, RestApis> {
        let input = GetRestApisRequest(
            limit: limit
        )
        return self.getRestApisPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getUsage(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsagePaginator(
        _ input: GetUsageRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetUsageRequest, Usage> {
        return .init(
            input: input,
            command: self.getUsage,
            inputKey: \GetUsageRequest.position,
            outputKey: \Usage.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getUsage(_:logger:)``.
    ///
    /// - Parameters:
    ///   - endDate: The ending date (e.g., 2016-12-31) of the usage data.
    ///   - keyId: The Id of the API key associated with the resultant usage data.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - startDate: The starting date (e.g., 2016-01-01) of the usage data.
    ///   - usagePlanId: The Id of the usage plan associated with the usage data.
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsagePaginator(
        endDate: String,
        keyId: String? = nil,
        limit: Int? = nil,
        startDate: String,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetUsageRequest, Usage> {
        let input = GetUsageRequest(
            endDate: endDate, 
            keyId: keyId, 
            limit: limit, 
            startDate: startDate, 
            usagePlanId: usagePlanId
        )
        return self.getUsagePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getUsagePlanKeys(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsagePlanKeysPaginator(
        _ input: GetUsagePlanKeysRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetUsagePlanKeysRequest, UsagePlanKeys> {
        return .init(
            input: input,
            command: self.getUsagePlanKeys,
            inputKey: \GetUsagePlanKeysRequest.position,
            outputKey: \UsagePlanKeys.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getUsagePlanKeys(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - nameQuery: A query parameter specifying the name of the to-be-returned usage plan keys.
    ///   - usagePlanId: The Id of the UsagePlan resource representing the usage plan containing the to-be-retrieved UsagePlanKey resource representing a plan customer.
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsagePlanKeysPaginator(
        limit: Int? = nil,
        nameQuery: String? = nil,
        usagePlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetUsagePlanKeysRequest, UsagePlanKeys> {
        let input = GetUsagePlanKeysRequest(
            limit: limit, 
            nameQuery: nameQuery, 
            usagePlanId: usagePlanId
        )
        return self.getUsagePlanKeysPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getUsagePlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsagePlansPaginator(
        _ input: GetUsagePlansRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetUsagePlansRequest, UsagePlans> {
        return .init(
            input: input,
            command: self.getUsagePlans,
            inputKey: \GetUsagePlansRequest.position,
            outputKey: \UsagePlans.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getUsagePlans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - keyId: The identifier of the API key associated with the usage plans.
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsagePlansPaginator(
        keyId: String? = nil,
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetUsagePlansRequest, UsagePlans> {
        let input = GetUsagePlansRequest(
            keyId: keyId, 
            limit: limit
        )
        return self.getUsagePlansPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getVpcLinks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getVpcLinksPaginator(
        _ input: GetVpcLinksRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetVpcLinksRequest, VpcLinks> {
        return .init(
            input: input,
            command: self.getVpcLinks,
            inputKey: \GetVpcLinksRequest.position,
            outputKey: \VpcLinks.position,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getVpcLinks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of returned results per page. The default value is 25 and the maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func getVpcLinksPaginator(
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetVpcLinksRequest, VpcLinks> {
        let input = GetVpcLinksRequest(
            limit: limit
        )
        return self.getVpcLinksPaginator(input, logger: logger)
    }
}

extension APIGateway.GetApiKeysRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetApiKeysRequest {
        return .init(
            customerId: self.customerId,
            includeValues: self.includeValues,
            limit: self.limit,
            nameQuery: self.nameQuery,
            position: token
        )
    }
}

extension APIGateway.GetBasePathMappingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetBasePathMappingsRequest {
        return .init(
            domainName: self.domainName,
            domainNameId: self.domainNameId,
            limit: self.limit,
            position: token
        )
    }
}

extension APIGateway.GetClientCertificatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetClientCertificatesRequest {
        return .init(
            limit: self.limit,
            position: token
        )
    }
}

extension APIGateway.GetDeploymentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetDeploymentsRequest {
        return .init(
            limit: self.limit,
            position: token,
            restApiId: self.restApiId
        )
    }
}

extension APIGateway.GetDomainNamesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetDomainNamesRequest {
        return .init(
            limit: self.limit,
            position: token,
            resourceOwner: self.resourceOwner
        )
    }
}

extension APIGateway.GetModelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetModelsRequest {
        return .init(
            limit: self.limit,
            position: token,
            restApiId: self.restApiId
        )
    }
}

extension APIGateway.GetResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetResourcesRequest {
        return .init(
            embed: self.embed,
            limit: self.limit,
            position: token,
            restApiId: self.restApiId
        )
    }
}

extension APIGateway.GetRestApisRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetRestApisRequest {
        return .init(
            limit: self.limit,
            position: token
        )
    }
}

extension APIGateway.GetUsagePlanKeysRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetUsagePlanKeysRequest {
        return .init(
            limit: self.limit,
            nameQuery: self.nameQuery,
            position: token,
            usagePlanId: self.usagePlanId
        )
    }
}

extension APIGateway.GetUsagePlansRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetUsagePlansRequest {
        return .init(
            keyId: self.keyId,
            limit: self.limit,
            position: token
        )
    }
}

extension APIGateway.GetUsageRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetUsageRequest {
        return .init(
            endDate: self.endDate,
            keyId: self.keyId,
            limit: self.limit,
            position: token,
            startDate: self.startDate,
            usagePlanId: self.usagePlanId
        )
    }
}

extension APIGateway.GetVpcLinksRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> APIGateway.GetVpcLinksRequest {
        return .init(
            limit: self.limit,
            position: token
        )
    }
}
